2010-11-23 44 views
0

我有一个作为桌面应用程序运行的程序,但也可以作为Windows服务安装。通过在GUI上使用“作为服务安装”按钮来完成安装。此按钮的事件处理程序是这样的:在Vista下安装服务并添加注册表项+

ProcessStartInfo psi = new ProcessStartInfo("sc", "description " + 
    this.ServiceName + " \"" + 
     ((AssemblyDescriptionAttribute)attributes[0]).Description + "\"") 
psi.CreateNoWindow = true; 
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
psi.Verb = "runas"; 
Process.Start(psi).WaitForExit();  

我想现在要做的是增加下说出一些其他注册表项:

HKLM\SOFTWARE\MyCompany\Services 

这也需要更高的权限。但是,如果我使用与上述相同的过程并使用命令“REG ADD”,那么UAC对话框将不止一次出现 - 我不想这样做。

那么最好的方式来安装一个Windows服务,并在HKLM下添加一个注册表项,只有一次UAC提示?

回答

0

我最后调用了自己的管理员权限和一个特殊参数myprogram.exe -i,然后转入使用ServiceInstaller类将程序安装为服务(而不是调用sc)的特殊方法。

1

创建一个小的exe文件或批处理文件来完成这两件事(sc和reg更新)。启动而不是sc。

+0

感谢您的回答。这似乎是明显的解决方案,但我想避免这种情况,因为代码位于共享库中。如果我不得不依赖诸如批处理文件或exe之类的其他组件,它会使部署复杂化。 – Jeldrik 2010-11-24 09:18:01

1

至于安装服务。
您可以尝试topshelf。它很容易使用,非常强大。

相关问题