我有一个作为桌面应用程序运行的程序,但也可以作为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提示一次的注册表项吗?
答案 0 :(得分:1)
创建一个小exe或批处理文件,同时执行这两项操作(sc和reg update)。启动 而不是sc。
答案 1 :(得分:1)
关于安装服务 您可以尝试topshelf。它易于使用且功能强大。
答案 2 :(得分:0)
我最后用管理员权限和一个特殊参数myprogram.exe -i
调用自己,然后分支到一个特殊方法,该方法使用ServiceInstaller
类将程序安装为服务(而不是调用sc)。