繁体   English   中英

如何在windows服务安装时默认勾选“允许服务与桌面交互”

[英]How to keep "Allow Service to interact with desktop" checked by default at the time of windows service installation

我创建了一个 Windows 服务,它应该打开并运行 ABC.exe 应用程序。 我知道这样做是一种不好的做法,不要因为这个原因而拒绝投票,因为我目前没有任何其他选择。 我对此进行了大量研究,并发现了一种解决方法,使其具有交互性。我使用了此链接: https : //code.msdn.microsoft.com/windowsapps/CSCreateProcessAsUserFromSe-b682134e但我现在面临的问题是用户必须手动设置本地系统帐户并选中“允许服务与桌面交互”框。 我现在想要做的就是在安装时默认选中它。 所以当用户安装服务时,它应该已经被检查并且服务应该处于运行状态(不必手动启动服务 - 我已经完成了这部分)。 我在这里看到了一些类似的帖子,但它们都展示了从外部应用程序启动服务的方法,例如创建另一个控制台应用程序和使用 system.management.managementobject。 我想知道是否有任何方法可以在服务本身中添加一些代码以及在哪里添加? ps.:我正在为 windows vista+ 系统创建此服务。

请帮助我解决这个问题很长一段时间。 提前致谢。

我建议你做的是直接在注册表中修改值

在安装程序类中,覆盖OnCommitted(System.Collections.IDictionary savedState)方法。

在该方法中,修改确保此设置的注册表项,如下所示:

protected override void OnCommitted(System.Collections.IDictionary savedState)
{
  base.OnCommitted(savedState);
  string regKey = "SYSTEM\\CurrentControlSet\\Services\\MyServiceName";
  var key = Registry.LocalMachine.OpenSubKey(regKey, RegistryKeyPermissionCheck.ReadWriteSubTree)
          ?? Registry.LocalMachine.CreateSubKey(regKey, RegistryKeyPermissionCheck.ReadWriteSubTree);

 // might need to check the result, should be hex 110 or Decimal 272
 key.SetValue("Type", 272, RegistryValueKind.DWord); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM