2011-10-19 9 views
3

私はWindows 7でサービスを実行しています。Windows 7ではすべてのサービスがセッション0で実行されます。そのサービスから、セッション0以外)、そのセッションでアプリケーションを起動します。私の問題は、LogonUserを呼び出して対話型のユーザーセッションを開始し、CreateProcessAsUserを使用してアプリケーションを起動すると、アプリケーションがセッション0で終了することです。Windows 7サービスからセッション1のプロセスを開始する方法

すべてのコードは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"); 

誰もが私が間違ってやっているものを私に伝えることができますか?

+0

User856021、こんにちは弟、問題を解決したら、コードを投稿できますか?私はWindows 8を使用して、同じ問題を実行しています。 –

答えて

3

Vista/7のサービスからプロセスを起動しようとすると、さまざまなことが起こる可能性があります。私はあなたがthisの記事から始まり、あなたのニーズに適応することをお勧めします。記事のコードを使用して修正したことがありますが、それはうまくいきます。変更されたコードが私の会社に属しているため、私はあなたにそれを示すことができません申し訳ありません。

+0

マット - 大変ありがとうございます。 LogonUserを使用してユーザーセッションを作成して、ユーザーがログインしていないケースを処理できるようにしたいと考えていました。これはWinXPではうまく動作しますが、Win7ではSessioin0 Isolationでは動作しません。 – user856021

+0

これは私を多く助けました...私の問題を解決する方法の基礎を私に与えました。 +1 –

関連する問題