2

私はこのコードを持っています:

    [PermissionSet(SecurityAction.Assert, Name = "FullTrust")]
    public List<WinInfo> GetWindows()
    {
        try
        {
            var isFullTrust = Assembly.GetExecutingAssembly().IsFullyTrusted;
            if (isFullTrust)
            {
                return Process.GetProcesses().Where(z => !string.IsNullOrEmpty(z.MainWindowTitle))
                    .Select(z => new WinInfo
                        {
                            ProcessID = z.Id,
                            ProcessName = z.ProcessName,
                            WinID = z.MainWindowHandle,
                            WindowTitle = z.MainWindowTitle
                        }).ToList();
            }
            else
                return null;
        }
        catch (Exception ex)
        {
            Trace.Write(ex.Message);
            return null;
        }
    }

現在のユーザー(管理者権限を持つ)でローカルコンピューターにテストインすると、正常に動作し、ウィンドウを持つすべてのプロセスが表示されます。しかし、「ローカルサービス」アカウントで実行されているWindowsサービスからこのコードを呼び出すと、リストは空になります。プロセスに接続し、デバッグを通じて、「Process.GetProcesses()」がすべてのプロセスを返すことがわかりましたが、ウィンドウがある場合でも、すべてのプロセスでMainWindowHandleが0、MainWindowTitleが空です。では、私のコードの何が問題になっていますか?

編集私はコードを編集しました。これにより、アセンブリが完全に信頼されているかどうかがチェックされ、コードに必要な権限を付与するPemmissionSetが作成されます。それでも結果は同じです。デバッグすると、「isFullTrust」が「True」であり、コードが例外なく実行されていることがわかります。空でないMainWindowTitleが含まれているプロセスはないため、リストは空のままです。

4

3 に答える 3

1

確かに、ユーザーアカウントでそれを実行する必要があります! ウィンドウが開いているアプリケーションがローカル システム アカウントで実行されるのはなぜですか? それはWindowsサービスなどのためです

また、完全な信頼を必要とするプロセスに関連している可能性もあります

MSDN から: Process クラスには、FullTrust の LinkDemand と InheritenceDemand があります。これは、アセンブリが完全に信頼されていない場合、新しいプロセスを開始したり、実行中のプロセスに関する情報を取得したりできないことを意味します

于 2012-07-16T13:10:26.760 に答える
0

多分これは特権の問題です。このリンクによれば、LocalServiceはローカル コンピューターに対して最小限の権限を持っています。

ローカル システム アカウントを使用する必要があります

于 2012-07-16T12:41:10.557 に答える
0

このスレッドによると:

あなたが見ている問題は、デフォルトでサービスがインタラクティブなデスクトップにアクセスできないためです。サービスからデスクトップと対話することはお勧めしません (#1、デスクトップが存在しない可能性がある、#2 複数のデスクトップが存在する可能性がある、#3 Vista のサービスからデスクトップと対話することは実装されていません) が、確認できます。サービス プロパティの「デスクトップとの対話」。

非表示のフォームを作成してみてはいかがでしょうか。

于 2012-07-17T06:01:48.037 に答える