Как установить, “взаимодействуют с рабочим столом” в сервисном установщике окон

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

6
задан Daniel Vygolov 28 July 2010 в 09:28
поделиться