У меня есть служба Windows, работающая под учетной записью «SYSTEM», которая проверяет, работает ли определенное приложение для каждого вошедшего в систему пользователя. Если приложение не запущено, служба запускает его (под соответствующим именем пользователя).
Я пытаюсь достичь своей цели с помощью CreateProcessAsUser (). Служба запускает приложение под соответствующим именем пользователя, но графический интерфейс не отображается. (Да, я проверяю, установлен ли флажок «Разрешить сервису взаимодействовать с рабочим столом»).
Система: XP SP3, язык: C #
Вот код, который может быть интересен:
PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION();
startInfo.cb = Marshal.SizeOf(startInfo);
startInfo.lpDesktop = "winsta0\\default";
bResult = Win32.CreateProcessAsUser(hToken, null, strCommand, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out processInfo);
Насколько я понимаю, установка startInfo.lpDesktop = "winsta0 \ default"; должен был использовать рабочий стол соответствующего пользователя.
Даже вопреки тому, что указано здесь: http://support.microsoft.com/kb/165194, Я попытался установить для lpDesktop значение null или не задавать его вообще, оба результата дали один и тот же: процесс был запущен от имени ожидаемого пользователя, и я мог видеть часть строка заголовка окна. «Невидимое» окно перехватывает события щелчка мыши и обрабатывает их, как и ожидалось. Это просто не тянет себя.
Кто-нибудь знаком с такой проблемой и знает, что я делаю не так?