Я создал службу С#, используя шаблон VS2005. Он отлично работает, однако описание службы пустое в апплете управления службами Windows.
Какой лучший способ установить описание службы Windows в .net
Ответ 1
Создайте ServiceInstaller и установите описание
private System.ServiceProcess.ServiceInstaller serviceInstaller =
new System.ServiceProcess.ServiceInstaller();
this.serviceInstaller.Description = "Handles Service Stuff";
Ответ 2
Чтобы прояснить, как это сделать, не используя код:
-
Добавьте в свой проект установщика услуг, как описано здесь: http://msdn.microsoft.com/en-us/library/ddhy0byf%28v=vs.80%29.aspx
-
Откройте конструктор (например, ProjectInstaller.cs) в представлении "Дизайн".
-
Один клик по компоненту установщика службы (например, serviceInstaller1) или щелкните его правой кнопкой мыши и выберите "Свойства".
-
На панели "Свойства" установите "Описание" и/или "DisplayName" (это также означает, что вы устанавливаете StartType и т.д.). Описание, вероятно, все, что вы хотите изменить, хотя, если вы хотите дать немного более понятный для человека DisplayName (первый столбец в Менеджере служб) вы также можете сделать это.
-
При желании откройте созданный автоматически файл конструктора (например, ProjectInstaller.Designer.cs), чтобы убедиться, что свойства были установлены правильно.
-
Создайте решение и установите его с помощью
installutil.exe
или других средств.
Ответ 3
После создания проекта установки службы в VS2010 вам необходимо добавить переопределение метода Install в класс, созданный VS, для создания записи реестра для описания вашего сервиса.
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 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
Ответ 4
Также вы можете создать ServiceInstaller, а в окне свойств установщика Service вы увидите свойство Description, которое вы можете установить. Если вы не хотите его кодировать.
Ответ 5
Вы также можете установить имя и описание службы из среды IDE, щелкнув правой кнопкой мыши значок "serviceInstaller" в представлении проекта класса ProjectInstaller.