我有一个windows系统,它在系统帐户下运行并且不时执行一些程序(是的,是的,我知道这是一种不好的做法,但那不是我的决定)。我需要设置“与桌面交互”检查,以便在安装服务之后查看执行的程序的GUI。我尝试了几种方法,把下面的代码在AfterInstall或OnCommited我的服务安装程序的事件处理程序:如何在windows服务安装程序中设置“与桌面交互”
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和Windows 7尚未...)
试图使用“sc config”命令 - 没有办法... – 2010-07-28 11:45:44
试图使用winapi从http://www.codeproject.com/KB/vb/WindowsServiceInstall.aspx导出 - 没有运气... – 2010-07-28 13:05:41