У меня есть сервис окон, который работает в соответствии с системной учетной записью и время от времени выполняет некоторые программы (да, да, я знаю, что это - плохая практика, но это не мое решение). Я должен установить, "взаимодействуют с настольной" проверкой, для наблюдения 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 еще...),