2010-04-06 5 views
2

У меня есть служба 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 на нуль или вообще не устанавливать его, оба дают тот же результат: процесс был запущен от имени ожидаемого пользователя, и я мог видеть часть названия окна бар. «Невидимое» окно перехватывает события щелчка мыши, обрабатывает их, как ожидалось. Он просто не рисует себя.

Кто-нибудь знаком с такой проблемой и знает, что я делаю неправильно?

+0

Я столкнулся с той же проблемой, смогли ли вы найти решение? – 2011-01-30 21:55:30

ответ

1

MSDN есть пример того, как создать процесс, как установка явного разрешения на объекты окна станции и рабочего стола другому пользователю:

CreateProcessAsUser() windowstations and desktops

Вы можете портировать код на C# используя P/Invoke, или вы можете использовать сборку C++/CLI.

Однако следует помнить, что ваш сценарий не поддерживается и скорее всего порвать с Vista, (и Windows 7) Session-0 isolation (скачать официальный документ справа).

Смежные вопросы