0

私はサービスを書いていて、ログインしているユーザーの sid を取得しようとしていますが、何らかの理由で機能していません。{S-1-5-18} のみを返します。それでも、簡単なコンソール アプリケーションを作成すると、問題なく動作します。

私は2つの方法を試しました:

WindowsIdentity usr = WindowsIdentity.GetCurrent();
return usr.User

としても:

UserPrincipal.Current.Sid

どちらも私のサービスに同じ影響を与えます。どちらも {S-1-5-18} のみを返します。ただし、コンソール アプリでは、どちらも完全なユーザー sid を返します。

何が原因でしょうか?

4

2 に答える 2

4

NT AUTHORITY\SYSTEMサービスプロセスをorとして実行していると思います.\LOCALSYSTEM詳細については、 KB 243330を参照してください。

SID: S-1-5-18
名前: Local System
説明: オペレーティング システムによって使用されるサービス アカウント。

デスクトップ セッションから SID を取得する場合は、たとえば ( cassia - nuget-package available を利用して)を実行できます。

    ITerminalServicesSession GetActiveSession()
    {
        var terminalServicesSession = default(ITerminalServicesSession);
        var terminalServicesManager = new TerminalServicesManager();
        using (var server = terminalServicesManager.GetLocalServer())
        {
            foreach (var session in server.GetSessions())
            {
                if (session.ConnectionState == ConnectionState.Active)
                {
                    // yep, I know ... LINQ ... but this is from a plain .NET 2.0 source ...
                    terminalServicesSession = session;
                    break;
                }
            }
        }
        return terminalServicesSession;
    }

-instance には、必要に応じて機能ITerminalServiceSessionするプロパティが含まれていSessionIdます。ただし、セッションの状態に関連する注意事項があることに注意してください。私の条件が十分であることを保証するものではありません。必要に応じて条件を調整する必要がある場合がありConnectionStateます。

于 2015-04-15T12:59:32.813 に答える
0

これらの API は、現在のプロセス (この場合はサービス) を実行しているユーザーの SID を返します。S-1-5-18ですNT AUTHORITY\SYSTEM

Windows システムにはゼロから多数のユーザーがログオンできます (インタラクティブな使用の場合: ローカルまたはリモート): 単一の "ログオン ユーザー" はありません。

要件を絞り込む必要があります。ログオンしているユーザーを知りたいのはなぜですか?

于 2015-04-15T13:01:21.337 に答える