以编程方式安装Windows服务

时间:2010-01-15 14:38:05

标签: c# windows-services

如何在不使用installutil.exe的情况下以编程方式安装Windows服务?

4 个答案:

答案 0 :(得分:62)

您可以通过添加此代码(在程序文件Program.cs中)来安装服务,以便在使用指定参数从命令行运行时自行安装:

/// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main(string[] args)
        {
            if (System.Environment.UserInteractive)
            {

                if (args.Length > 0)
                {
                    switch (args[0])
                    {
                        case "-install":
                            {
                                ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
                                break;
                            }
                        case "-uninstall":
                            {
                                ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
                                break;
                            }
                    }
                }
            }
            else
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] { new MyService() };
                ServiceBase.Run(ServicesToRun);
            }
        }

答案 1 :(得分:11)

我使用以下CodeProject文章中的方法,它运行良好。

Windows Services Can Install Themselves

答案 2 :(得分:3)

我通过命令行安装和卸载Windows服务,例如MyWindowsService.exe -installMyWindowsService.exe -uninstall,以避免自己使用installutil.exe。我已经写了一套关于如何执行此操作的说明here

答案 3 :(得分:0)

我无法评论缺少名声的公元前,但是关于马克·雷德曼(Mark Redman)的解决方案-如果您怀疑找不到给定路径中的密钥,请签出WOW6432Node

来自AdvancedInstaller

Wow6432Node注册表项表明您正在运行64位Windows版本。

对于使用64位Windows版本运行的32位应用程序,操作系统使用此键显示HKEY_LOCAL_MACHINE \ SOFTWARE的单独视图。当32位应用程序在HKEY_LOCAL_MACHINE\SOFTWARE\<company>\<product>子项下写入或读取值时,该应用程序将从HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\<company>\<product> subkey.

中读取