安装服务并在Vista +下添加注册表项

时间:2010-11-23 15:16:08

标签: c# windows-services installation registry uac

我有一个作为桌面应用程序运行的程序,但也可以作为Windows服务安装。通过使用GUI上的“安装为服务”按钮完成安装。此按钮的事件处理程序如下所示:

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提示一次的注册表项吗?

3 个答案:

答案 0 :(得分:1)

创建一个小exe或批处理文件,同时执行这两项操作(sc和reg update)。启动 而不是sc。

答案 1 :(得分:1)

关于安装服务 您可以尝试topshelf。它易于使用且功能强大。

答案 2 :(得分:0)

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