2016-11-25 9 views
1

私はcmdでrunas.exeを起動し、そのユーザーとして別のアプリケーションを実行するC#コンソールアプリケーションを作成しようとしています。私は、以下に挙げた提案のうちの1つをとりました(少し追加しました)。コンソールアプリケーションにcmdコマンドを書き込む

Process cmd = new Process(); 
ProcessStartInfo startinfo = new ProcessStartInfo("cmd.exe", @"/K C:\Windows\System32\runas.exe /noprofile /user:DOMAIN\USER'c:\windows\system32\notepad.exe\'") 
{ 
    RedirectStandardInput = true, 
    UseShellExecute = false 
}; 
cmd.StartInfo = startinfo; 
cmd.Start(); 
StreamWriter stdInputWriter = cmd.StandardInput; 
stdInputWriter.Write("PASSWORD"); 
cmd.WaitForExit(); 

私はコマンド自体がrunas.exe

enter image description here

との誤差があることが原因となる前にパスワードを要求するアプリケーションを起動すると、私はUseShellExecute = falseは、エラーの原因となっているかなり確信しているが、 StreamWriterはそれがなければ動作しませんので、私は何をすべきか分かりません。

+0

試しましたか? stdInputWriter.WriteLine( "password"); ? 入力を確認していない可能性がありますか? –

+1

@JakubSzułakiewiczしかし、私はまだストリームライターを宣言する必要があり、私は 'Process.StandardInput'でそれをしなければ何を宣言すればいいのですか? – BlueBarren

答えて

0

私はfollowing postで解決策を見つけました。私は作業していた構造のほとんどを忘れていましたが、以下のコードを使用したいユーザーとしてメモ帳を正常に実行できます。

var pass = new SecureString(); 
pass.AppendChar('p'); 
pass.AppendChar('a'); 
pass.AppendChar('s'); 
pass.AppendChar('s'); 
pass.AppendChar('w'); 
pass.AppendChar('o'); 
pass.AppendChar('r'); 
pass.AppendChar('d'); 
var runFileAsUser = new ProcessStartInfo 
{ 
    FileName = "notepad", 
    UserName = "username", 
    Domain = "domain", 
    Password = pass, 
    UseShellExecute = false, 
    RedirectStandardOutput = true, 
    RedirectStandardError = true 
}; 
Process.Start(runFileAsUser); 
2

/C引数はcomman行を実行し、終了し、あなたは結果を見ることができなかったので(と、それは大きなCだ)、彼女を参照してください。http://ss64.com/nt/cmd.html

は「/ K」を使用してみてください。 私はあなたの命令でそれを行いました。結果は別のウィンドウに表示されます。

ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/K ping PC -t"); 
Process.Start(startInfo); 
+0

良いもの!これで私はコマンドを実行して、今すぐC#変数をcmdに入力する方法を見つけなければなりません。 – BlueBarren

+0

@BlueBarrenありがとうございます。回答を解決策としてマークすることもできます:) –

+0

私の問題はまだ解決していません:P – BlueBarren

1

あなたのプロセスはRedirectStandardInput =真

var p = new Process(); 
var startinfo = new ProcessStartInfo("cmd.exe", @"/C C:\temp\input.bat") 
{ 
    RedirectStandardInput = true, 
    UseShellExecute = false 
}; 
p.StartInfo = startinfo; 
p.Start(); 
StreamWriter stdInputWriter = p.StandardInput;   
stdInputWriter.Write("y");  

このプログラムは起動input.batを持っており、それが標準入力ですyに値を送信しなければなりません。完全のために

input.bat例:

set /p input=text?: 
echo %input% 
+0

私は ''/K "'を使っているので、cmdウィンドウが何をしているのかを見ることができますが、それでもまだ閉じています、なぜですか?それは前に働いていた。いずれにしても、あなたのメソッドが動作しているかどうかわからないのは、私が試しているコマンドがメモ帳を起動することですが、まだ起動していないからです。 – BlueBarren

+0

私の環境では/ Kと/ Cの両方で動作するメモ帳が動作していますが、パスにメモ帳がありますか? – Ofiris

+0

パスは 'c:\ windows \ system32 \ notepad.exe \'です。@MarksimSimkinの答えが正しく動作したので – BlueBarren

関連する問題