Полный пример кода:
1 using System;
2 using System.ComponentModel;
3 using System.Configuration.Install;
4 using System.Reflection;
5 using System.ServiceProcess;
6
7 namespace ServiceInstallerTemplate
8 {
9 public class Service : ServiceBase
10 {
11 public Service()
12 {
13 ServiceName = "UniqueServiceName";
14 }
15 }
16
17 [RunInstaller(true)]
18 public class ServiceInstaller : Installer
19 {
20 public ServiceInstaller()
21 {
22 var serviceProcessInstaller = new ServiceProcessInstaller();
23
24 serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
25 serviceProcessInstaller.Username = null;
26 serviceProcessInstaller.Password = null;
27
28 var serviceInstaller = new System.ServiceProcess.ServiceInstaller();
29
30 serviceInstaller.DisplayName = "Service user friendly name";
31 serviceInstaller.Description = "Service description";
32 serviceInstaller.StartType = ServiceStartMode.Automatic;
33
34 /* This must be identical to the System.ServiceProcess.ServiceBase.ServiceName*/
35 serviceInstaller.ServiceName = "UniqueServiceName";
36
37 Installers.Add(serviceProcessInstaller);
38 Installers.Add(serviceInstaller);
39 }
40 }
41
42 class Program
43 {
44 static void Main(string[] args)
45 {
46 var exeFileName = Assembly.GetExecutingAssembly().Location;
47
48 if (args.Length != 1)
49 WriteHelp();
50 else if (args[0] == "--install")
51 ManagedInstallerClass.InstallHelper(new[] { exeFileName });
52 else if (args[0] == "--uninstall")
53 ManagedInstallerClass.InstallHelper(new[] { "/u", exeFileName });
54 else
55 WriteHelp();
56 }
57
58 static void WriteHelp()
59 {
60 Console.WriteLine("Use:");
61 Console.WriteLine("--install - install service");
62 Console.WriteLine("--uninstall - uninstall service");
63 }
64 }
65 }
Добрый день! А есть ли возможность устанавливать в качестве сервисов сторонние приложения с помощью этих классов? Например хочу из кода .net установить в качестве службы сторонний exe.
ОтветитьУдалитьЗдравствуйте. Нет, нельзя. Для того чтобы работали эти классы exe должен быть .NET сборкой и содержать определение наследника System.Configuration.Install.Installer. С помощью этих классов можно создать сервис-обертку, который при запуске будет запускать ваш exe, или, например, python-скрипт. Но это нужно в редких случаях, когда нужно взаимодействие с запущенной программой. Если просто нужно сделать сервис из произвольной программы, то посмотрите, например, вот это http://www.tacktech.com/display.cfm?ttid=197
ОтветитьУдалитьСпасибо большое за совет!
ОтветитьУдалить