2017-12-16 11 views
0

たとえば、コマンド "net user usrname *"にパスワードを入力する3つの手順が含まれています。プロセスがC#でCMD.exeを使用しているときに "Multi-Step"コマンドを実行しました

私のコードを実行している間、追加の引数を送信することが可能であるならば、その後の検証、私は知らない。

Process p = new Process(); 
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.FileName = "cmd.exe"; 
p.StartInfo.Arguments = "/C " + command; 
p.StartInfo.WorkingDirectory = startupFolder; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.RedirectStandardError = true; 
p.StartInfo.UseShellExecute = false; 
p.Start(); 
string output = p.StandardOutput.ReadToEnd(); 
string error = p.StandardError.ReadToEnd(); 
+1

は、標準入力をリダイレクトし、それが文字列養います。 –

+0

RedirectStandardInput = trueでp.StandardInputストリームに文字列を書き込みます – Arthur

+0

このテクニックは試してみます –

答えて

1

あなたは「&」で、各コマンドを連結します。たとえば、「cmd/k echo test 1 & echo test 2」と入力します。

編集:

私はあなたがWebポータル経由でリモートコンピュータに対してバッチおよびPowerShellのスクリプトを実行できるようにするには、この同じ技術を使用していますしばらく前に、リモートコントロール/リモート管理ソリューションaを作成しました。下のスクリーンショットに示すように、それは動作します。

enter image description here

コマンドを実行C#がここで見つけることができます:https://github.com/Jay-Rad/InstaTech_Client/blob/master/InstaTech_Service/Socket.cs#L614

if (cmdProcess == null || cmdProcess.HasExited) 
{ 
    var psi2 = new ProcessStartInfo("cmd.exe", "/k " + command); 
    psi2.RedirectStandardOutput = true; 
    psi2.RedirectStandardInput = true; 
    psi2.RedirectStandardError = true; 
    psi2.UseShellExecute = false; 
    psi2.WorkingDirectory = Path.GetPathRoot(Environment.SystemDirectory); 

    cmdProcess = new Process(); 
    cmdProcess.StartInfo = psi2; 
    cmdProcess.EnableRaisingEvents = true; 
    cmdProcess.OutputDataReceived += async (object sender, DataReceivedEventArgs args) => 
    { 
     jsonMessage.Status = "ok"; 
     jsonMessage.Output = args.Data; 
     await SocketSend(jsonMessage); 

    }; 
    cmdProcess.ErrorDataReceived += async (object sender, DataReceivedEventArgs args) => 
    { 
     jsonMessage.Status = "ok"; 
     jsonMessage.Output = args.Data; 
     await SocketSend(jsonMessage); 
    }; 
    cmdProcess.Start(); 
    cmdProcess.BeginOutputReadLine(); 
    cmdProcess.BeginErrorReadLine(); 
} 
else 
{ 
    cmdProcess.StandardInput.WriteLine(command); 
} 
+0

あなたの答えをありがとう、私は試してみましたが動作しませんので、私は何をすべきか分かりません –

+0

「うまく動作しません」を詳しく説明できますか?特異性は重要です。 :) – Jared

関連する問題