У меня есть служба Windows, работающая под учетной записью «SYSTEM», которая проверяет, выполняется ли конкретное приложение для каждого зарегистрированного пользователя. Если приложение не запущено, служба запускает его (под соответствующим именем пользователя).
Я пытаюсь выполнить свою цель, используя CreateProcessAsUser(). Служба запускает приложение под соответствующим именем пользователя, но графический интерфейс не отображается. (Да, я уверен, что флажок «Разрешить обслуживание для взаимодействия с рабочим столом» включен).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 \ по умолчанию"; должен был использовать рабочий стол соответствующего пользователя.
Даже вопреки тому, что указано здесь: http://support.microsoft.com/kb/165194, я попытался установить lpDesktop на нуль или вообще не устанавливать его, оба дают тот же результат: процесс был запущен от имени ожидаемого пользователя, и я мог видеть часть названия окна бар. «Невидимое» окно перехватывает события щелчка мыши, обрабатывает их, как ожидалось. Он просто не рисует себя.
Кто-нибудь знаком с такой проблемой и знает, что я делаю неправильно?
Я столкнулся с той же проблемой, смогли ли вы найти решение? – 2011-01-30 21:55:30