У меня есть служба 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, и 7 еще ...)
попытался использовать команду «sc config» - никак ... –
попытался использовать экспорт winapi с http://www.codeproject.com/KB/vb/WindowsServiceInstall.aspx - без везения ... –