如何保持"允许服务与桌面交互"在Windows服务安装时默认选中

时间:2017-01-24 12:30:12

标签: c# visual-studio-2012 windows-services .net-4.5

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

请帮助,因为我在这个问题上坚持了很长一段时间。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我建议您直接在注册表中修改该值

在安装程序类中,覆盖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); 
}