c# – 如何在Windows服务安装程序中设置“与桌面交互”

前端之家收集整理的这篇文章主要介绍了c# – 如何在Windows服务安装程序中设置“与桌面交互”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Windows服务,在系统帐户下运行,并不时执行一些程序(是的,是的,我知道这是一个不好的做法,但这不是我的决定).我需要设置“与桌面交互”检查,以便在安装服务后查看已执行程序的gui.我尝试了几种方法,将下面的代码放在我的服务安装程序的AfterInstall或OnCommited事件处理程序中:
ConnectionOptions coOptions = new ConnectionOptions();
coOptions.Impersonation = ImpersonationLevel.Impersonate;

ManagementScope mgmtScope = new System.Management.ManagementScope(@"root\CIMV2",coOptions);
mgmtScope.Connect();

ManagementObject wmiService = new ManagementObject("Win32_Service.Name='" + ServiceMonitorInstaller.ServiceName + "'");

ManagementBaSEObject InParam = wmiService.GetMethodParameters("Change");
InParam["DesktopInteract"] = true;
ManagementBaSEObject OutParam = wmiService.InvokeMethod("Change",InParam,null);

要么

RegistryKey ckey = Registry.LocalMachine.OpenSubKey(
    @"SYSTEM\CurrentControlSet\Services\WindowsService1",true);

  if(ckey != null)
  {
    if(ckey.GetValue("Type") != null)
    {
      ckey.SetValue("Type",((int)ckey.GetValue("Type") | 256));
    }
  }

这两种方法都“有效”.他们设置了支票,但是在我启动服务之后启动了exe – 并且没有显示gui!所以,如果我停止服务,重新检查并再次启动它 – 宾果游戏!一切都开始并显示出来.实现结果的第二种方法是重新启动 – 之后还会显示gui.

所以问题是:是否有正确的方法来设置“与桌面交互”检查,所以它将开始工作而无需重新检查和重新启动?

操作系统:Windows XP(尚未试过Vista和7 ……)

解决方法

private static void SetInterActWithDeskTop()
        {
            var service = new System.Management.ManagementObject(
                    String.Format("WIN32_Service.Name='{0}'","YourServiceName"));
            try
            {
                var paramList = new object[11];
                paramList[5] = true;
                service.InvokeMethod("Change",paramList);
            }
            finally
            {
                service.Dispose();
            }


        }
原文链接:https://www.f2er.com/csharp/243241.html

猜你在找的C#相关文章