Черный фон на интерактивных окнах запущен из сервиса - PullRequest
1 голос
/ 21 сентября 2011

Я внедряю службу Windows в C #.Эта служба вызывает отдельное приложение, которое запускает интерактивные окна.Мне удалось решить проблемы, вызванные изоляцией сеанса 0, с помощью следующей последовательности шагов:

  1. LogonUser (), чтобы получить маркер входа для пользователя, который будет выполнять отдельное приложение
  2. SetTokenInformation () для передачи токена входа пользователя в сеанс 1
  3. 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, но симптомы в обоих случаях кажутся похожими.

...