1

Processクラスを使用してバッチファイルを実行しようとしています。このコードは、LogonUser()とWindowsIdentity.Impersonate()を使用してローカルPC管理者アカウントを偽装しているコードの大きなセクションの真ん中にあります。

ProcessStartInfoにクレデンシャルを追加せずに、プロセス内でバッチファイルを実行しようとしましたが、その方法でバッチファイルがサイレントに失敗しました-エラーは発生せず、バッチファイルからの期待される出力は返されませんでした(私は読んでいますstderrとstdoutは非同期で、fwiw)。

次に、クレデンシャルをProcessStartInfoに追加しましたが、最初にWindowsImpersonationContext.Undo()を呼び出さないと「アクセスが拒否されました」エラーが発生し、.Undoを呼び出すと「ログオン失敗:不明なユーザー名またはパスワードが正しくありません」というエラーが発生します。 ()Process.Start()の前。複数のアカウントについて、ユーザー名/パスワード/ドメインが正しいことをトリプルチェックしました。

コードにLogonUser()またはWindowsIdentity.Impersonate()呼び出しがない場合(およびProcessStartInfoに資格情報がない場合)、バッチファイルの実行とバッチファイルからの出力のキャプチャに問題はありません。

ローカル管理者または任意のローカルユーザーアカウントとして、デスクトップからバッチファイルを正常に実行できます。その権限は、実行しようとしているアカウントから読み取り可能/実行可能である必要があることを示していることがわかります。これは本当にかなりのスタンパーです。どんな助けでも大歓迎です。

4

2 に答える 2

0

問題は、3 つのストリームすべてをリダイレクトする必要があることでした。私は2つだけリダイレクトしていました(アウト、エラー、インではありません)。それは基本的に物事を修正しました。

于 2012-02-27T03:47:16.317 に答える
0

このようなものをお探しですか?

Process proc = new Process();
proc.StartInfo.FileName = @"C:\WINNT\notepad.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;

proc.StartInfo.Domain = "mydomain.com"; // Domain of IIS Computer
proc.StartInfo.UserName = "kaung"; //Administrator for that computer
System.Security.SecureString password = new System.Security.SecureString();
password.AppendChar('m'); //Password
password.AppendChar('y');
password.AppendChar('p');
password.AppendChar('a');
password.AppendChar('s');
password.AppendChar('s');
password.AppendChar('w');
password.AppendChar('o');
proc.StartInfo.Password = password;

proc.Start();
于 2012-02-23T08:00:58.327 に答える