Я внедряю службу Windows в C #.Эта служба вызывает отдельное приложение, которое запускает интерактивные окна.Мне удалось решить проблемы, вызванные изоляцией сеанса 0, с помощью следующей последовательности шагов:
- LogonUser (), чтобы получить маркер входа для пользователя, который будет выполнять отдельное приложение
- SetTokenInformation () для передачи токена входа пользователя в сеанс 1
- CreateProcessAsUser () для запуска приложения в сеансе пользователя.
Это работает;Когда служба запускает приложение, я вижу, как окна приложения появляются в моем сеансе консоли.Тем не менее, окна приложения имеют черный фон, и все элементы управления невидимы.Если я щелкаю в области, где, как я знаю, есть кнопка, окно откликается, поэтому оно явно способно получать пользовательский ввод.
Вот (упрощенная и урезанная версия) код, который я используюиспользуя:
IntPtr logonToken;
LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out logonToken);
SetTokenInformation(logonToken, TOKEN_INFORMATION_CLASS.TokenSessionId, sessionIdValuePtr, sessionIdSize);
STARTUPINFO startupinfo = new STARTUPINFO();
startupinfo.cb = Marshal.SizeOf(startupinfo);
startupinfo.lpDesktop = @"winsta0\default";
PROCESS_INFORMATION processinfo;
SECURITY_ATTRIBUTES processAttributes = new SECURITY_ATTRIBUTES();
SECURITY_ATTRIBUTES threadAttributes = new SECURITY_ATTRIBUTES();
ImpersonateLoggedOnUser(logonToken);
CreateProcessAsUser(
logonToken,
null,
cmdLine,
ref processAttributes,
ref threadAttributes,
false,
0,
IntPtr.Zero,
workingDirectory,
ref startupinfo,
out processinfo)
RevertToSelf();
Я пытался добавить код для загрузки профиля пользователя перед вызовом CreateProcessAsUser, но это не помогло.
Что может вызывать черный фон на моих окнах и какя должен идти об исправлении этой проблемы?Любая помощь будет принята с благодарностью.
ОБНОВЛЕНИЕ: похоже, что это очень похоже на проблему в этом вопросе: CreateProcessAsUser не рисует GUI .Он использует XP SP3, и у меня возникла эта проблема в Windows 7 и Server 2008, что означает, что у меня есть дополнительная проблема, связанная с изоляцией сеанса 0, но симптомы в обоих случаях кажутся похожими.