8

偽装を実行している.NET 3.5 Webアプリ内で、次の方法でプロセスを実行しようとしています:

var process = new Process 
             { StartInfo = 
                    { CreateNoWindow = true, 
                      FileName = "someFileName", 
                      Domain = "someDomain", 
                      Username = "someUserName", 
                      Password = securePassword, 
                      UseShellExecute = false
                    }
             };

process.Start();

- web.config で信頼モードを完全に変更しても修正されませんでした。

-var securePassword は、コードの前半で設定された secureString であることに注意してください。

これにより、メッセージとして「アクセスが拒否されました」という例外がスローされます。ユーザー名とパスワードの情報を削除すると、例外はなくなりますが、プロセスは必要なユーザーではなく aspnet_wp として開始されます。

この問題は複数のフォーラムで見たことがありますが、解決策が提供されたことはありません。何か案は?

4

6 に答える 6

2

資格情報を指定できる ProcessStartInfo を使用できます。秘訣は、パスワードが安全な文字列であるため、バイト配列として渡す必要があることです。

コードは次のようになります。

Dim startInfo As New ProcessStartInfo(programName)
        With startInfo
            .Domain = "test.local"
            .WorkingDirectory = My.Application.Info.DirectoryPath
            .UserName = "testuser"
            Dim pwd As New Security.SecureString
            For Each c As Char In "password"
                pwd.AppendChar(c)
            Next
            .Password = pwd

            'If you provide a value for the Password property, the UseShellExecute property must be false, or an InvalidOperationException will be thrown when the Process..::.Start(ProcessStartInfo) method is called. 
            .UseShellExecute = False

            .WindowStyle = ProcessWindowStyle.Hidden
        End With
于 2008-09-23T15:32:25.187 に答える
1

これがそれであるかどうかはわかりませんが、関連する問題があり、その答えは、アカウントがマシン上で偽装する権限を持っていないというものでした. これは、マシンのローカル ポリシー マネージャーを使用して、「認証後にクライアントを偽装する」ポリシーにアカウントを追加することで変更できます。

于 2008-09-24T05:41:24.977 に答える
1

私は別の方法で、最初に偽装していたユーザーとして実行されている独自のアプリケーション プールにアプリケーション全体を配置しました。現在、asp.net が新しいプロセスを生成すると、aspnet_wp ではなくユーザーのコンテキストで生成されます。私が投稿した問題の正確な解決策ではありませんが、私たちの状況ではうまくいきました.

于 2008-09-29T14:17:51.280 に答える
0

あなたがプロジェクトで行ったのと同じ問題に遭遇しました。特定の資格情報を使用して Web アプリからプロセスを生成する方法があるはずですが、実際には、せいぜい面倒です。私が最終的にやったのは、アプリが情報を MSMQ にプッシュし、Windows サービスがキューのアイテムをポップして要求を処理することでした。

アプリケーションが偽装している場合でも、aspnet ユーザー アカウントで実行しようとします。

于 2008-09-23T15:26:11.413 に答える
0

コメントに記載されている更新されたコードを含め、このサイトでコードを試したことに言及したいと思い ます。このコードは、偽装された ID としてプロセスを実行しますが (これだけで十分です)、標準エラーのリダイレクトは失敗します。そのため、このリンクは、stderr の処理に関係のない人にとって役立つ可能性があります。

于 2008-09-23T16:22:29.670 に答える
0

プロセスが必要とするコード アクセス セキュリティレベルを確認します。Web アプリケーションが部分信頼設定で実行されている可能性があります。Full Trust

プロセス MSDN ページから:

アクセス許可

* 直接の呼び出し元に対する完全な信頼のLinkDemand 。
このクラスは、部分的に信頼されたコードでは使用できません。

*継承継承
者に対する完全な信頼の要求。このクラスは、部分的に信頼されたコードでは継承できません。

于 2008-09-23T15:44:52.600 に答える