如何在不使用installutil.exe的情况下以编程方式安装Windows服务?
答案 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文章中的方法,它运行良好。
答案 2 :(得分:3)
我通过命令行安装和卸载Windows服务,例如MyWindowsService.exe -install
和MyWindowsService.exe -uninstall
,以避免自己使用installutil.exe
。我已经写了一套关于如何执行此操作的说明here。
答案 3 :(得分:0)
我无法评论缺少名声的公元前,但是关于马克·雷德曼(Mark Redman)的解决方案-如果您怀疑找不到给定路径中的密钥,请签出WOW6432Node
“ 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.
“