在.net中设置windows服务描述的最佳方法是什么

t1qtbnec  于 2023-03-09  发布在  Windows
关注(0)|答案(6)|浏览(107)

我已经使用VS2005模板创建了一个C#服务。它工作正常,但是在Windows服务控制小程序中服务的描述是空白的。

liwlm1x9

liwlm1x91#

创建ServiceInstaller并设置描述

private System.ServiceProcess.ServiceInstaller serviceInstaller = 
  new System.ServiceProcess.ServiceInstaller();
this.serviceInstaller.Description = "Handles Service Stuff";
yrwegjxp

yrwegjxp2#

要阐明如何在不使用代码的情况下完成此操作:

  • 按如下所述将服务安装程序添加到项目中:http://msdn.microsoft.com/en-us/library/ddhy0byf%28v=vs.80%29.aspx
  • 在“设计”视图中打开安装程序(例如ProjectInstaller.cs)。
  • 单击服务安装程序组件(例如serviceInstaller 1),或右键单击该组件并选择“属性”。
  • 在“属性”窗格中,设置Description和/或DisplayName(这也是您设置StartType等的位置)。您可能只需要更改Description,但如果您希望给予一个更易于阅读的DisplayName(服务管理器中的第一列),也可以这样做。
  • 如果需要,请打开自动生成的设计器文件(例如ProjectInstaller.Designer.cs)以验证属性设置是否正确。
  • 使用installutil.exe或其他方法生成解决方案并安装。
yacmzcpb

yacmzcpb3#

在VS2010中创建服务安装程序项目之后,需要向VS创建的类中的Install方法添加一个重写,以便为服务描述创建注册表项。

using System;
 using System.Collections;
 using System.ComponentModel;
 using System.Configuration.Install;
 using System.ServiceProcess;
 using Microsoft.Win32;

 namespace SomeService
 {
    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Overriden to get more control over service installation.
        /// </summary>
        /// <param name="stateServer"></param>      
        public override void Install(IDictionary stateServer)
        {
            RegistryKey system;

            //HKEY_LOCAL_MACHINE\Services\CurrentControlSet
            RegistryKey currentControlSet;

            //...\Services
            RegistryKey services;

            //...\<Service Name>
            RegistryKey service;

            // ...\Parameters - this is where you can put service-specific configuration
            // Microsoft.Win32.RegistryKey config;

            try
            {
                //Let the project installer do its job
                base.Install(stateServer);

                //Open the HKEY_LOCAL_MACHINE\SYSTEM key
                system = Registry.LocalMachine.OpenSubKey("System");
                //Open CurrentControlSet
                currentControlSet = system.OpenSubKey("CurrentControlSet");
                //Go to the services key
                services = currentControlSet.OpenSubKey("Services");

                //Open the key for your service, and allow writing
                service = services.OpenSubKey("MyService", true);
                //Add your service's description as a REG_SZ value named "Description"
                service.SetValue("Description", "A service that does so and so");
                //(Optional) Add some custom information your service will use...
                // config = service.CreateSubKey("Parameters");
            }
            catch (Exception e)
            {

                throw new Exception(e.Message + "\n" + e.StackTrace);
            }
        }
    }
 }

http://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey.aspx
http://www.codeproject.com/KB/dotnet/dotnetscmdescription.aspx

4jb9z9bj

4jb9z9bj4#

您还可以通过右键单击ProjectInstaller类的设计视图中的“serviceInstaller”图标,在IDE中设置服务名称和描述。

piok6c0g

piok6c0g5#

你也可以创建一个服务安装程序,在服务安装程序的属性窗口中,你会看到一个描述属性,如果你不想编码它,你可以设置它。

ergxz8rk

ergxz8rk6#

除了列出的其他解决方案之外,请确保您使用installutil.exe而不是sc.exe安装服务。这两种方法都会将服务添加到您的服务控制面板,从那里可以启动和停止服务等。但installutil.exe是唯一一个可以设置“不错”功能(如Description和DisplayName)的方法。

相关问题