Как запустить процесс в сеансе 1 из службы Windows 7 - PullRequest
3 голосов
/ 19 октября 2011

У меня есть служба, работающая в Windows 7. В Windows 7 все службы работают в сеансе 0. Из этого сервиса я хочу создать интерактивный сеанс пользователя (в сеансе, отличном от сеанса 0) и запустить приложение в этом сеансе. Моя проблема заключается в том, что когда я вызываю LogonUser для запуска интерактивного пользовательского сеанса, а затем использую CreateProcessAsUser для запуска приложения, приложение заканчивается в сеансе 0.

Весь мой код - C #.

Вот соответствующий код:

[DllImport("advapi32.dll", SetLastError=true)]
static extern bool LogonUser(
    string principal,
    string authority,
    string password,
    UInt32 logonType,
    UInt32 logonProvider,
    out    IntPtr token);

[DllImport("advapi32.dll", SetLastError=true)]
static extern bool CreateProcessAsUser(
    IntPtr hToken,
    string lpApplicationName,
    string lpCommandLine,
    IntPtr lpProcessAttributes,
    IntPtr lpThreadAttributes,
    bool bInheritHandles,
    int dwCreationFlags,
    IntPtr lpEnvironment,
    string lpCurrentDirectory,
    ref STARTUPINFO lpStartupInfo,
    ref PROCESS_INFORMATION lpProcessInformation);

IntPtr token;
LogonUser("UserName", ".", "Password", 
    LogonTypes.Interactive,LogonProviders.Default, out token)

<code to impersonate user>
string hd = Environment.ExpandEnvironmentVariables("%USERPROFILE%");

IntPtr envBlock = IntPtr.Zero;
CreateProcessAsUser(token, "PathToMenu.exe",
    NORMAL_PRIORITY_CLASS |CREATE_UNICODE_ENVIRONMENT,
    "WinSta0\\Default", hd, envBlock, "Menu");

Может кто-нибудь сказать мне, что я делаю не так?

1 Ответ

3 голосов
/ 19 октября 2011

При попытке запустить процесс из службы в Vista / 7 может произойти множество ошибок.Я бы порекомендовал вам начать с этой статьи и адаптировать ее к вашим потребностям.Я могу сказать вам, что я использовал и изменил код в статье довольно много, и он работает.Извините, я не могу показать его вам, потому что измененный код принадлежит моей компании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...