@mtijnとして、あなたは後で上書きしていると言いました。また、物事を正しくエスケープしていることを確認する必要があります。
あなたが上昇し、次のコマンドを実行したいとしましょう:開いているウィンドウを維持するために何もないので
dir c:\
まず、あなただけのProcess.Start()
て、このコマンドを実行した場合、ウィンドウはすぐに開閉ポップう。コマンドを処理して終了します。私たちは別のコマンドウィンドウでコマンドをラップして実行し、それを維持するために/K
スイッチを使用することができます開いているウィンドウを維持するには:
cmd /K "dir c:\"
そのコマンドを実行するには、我々はあなたが我々がエスケープする必要があることを除いていただけのようにrunas.exe
を使用することができます上昇しましたもう少し物事。ヘルプ文書(runas /?
)には、runas
に渡すコマンド内の引用符をバックスラッシュでエスケープする必要があります。残念ながら、上記のコマンドでこれを行うと、二重のバックスラッシュがあり、cmdパーサを混乱させてエスケープする必要があります。したがって、上記のコマンドはされてしまいます。
cmd /K \"dir c:\\\"
を最後に、あなたは我々がrunas
コマンドにすべてを包むと引用符のさらなるセットで私たちの上記のコマンドを囲むことができます提供の構文を使用して:
runas /env /user:Administrator "cmd /K \"dir c:\\\""
を
上記のコマンドをコマンドプロンプトから実行して、期待どおりに機能することを確認します。最終的なコードは、組み立てが容易になることをすべて考える
:
//Assuming that we want to run the following command:
//dir c:\
//The command that we want to run
string subCommand = @"dir";
//The arguments to the command that we want to run
string subCommandArgs = @"c:\";
//I am wrapping everything in a CMD /K command so that I can see the output and so that it stays up after executing
//Note: arguments in the sub command need to have their backslashes escaped which is taken care of below
string subCommandFinal = @"cmd /K \""" + subCommand.Replace(@"\", @"\\") + " " + subCommandArgs.Replace(@"\", @"\\") + @"\""";
//Run the runas command directly
ProcessStartInfo procStartInfo = new ProcessStartInfo("runas.exe");
procStartInfo.UseShellExecute = true;
procStartInfo.CreateNoWindow = true;
//Create our arguments
string finalArgs = @"/env /user:Administrator """ + subCommandFinal + @"""";
procStartInfo.Arguments = finalArgs;
//command contains the command to be executed in cmd
using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
{
proc.StartInfo = procStartInfo;
proc.Start();
}
**はprocess.standardinputを使用せずにコマンドを実行することが可能ですか?私は引数に渡したコマンドを実行しようとしますが、コマンドは実行されません。**あなたは現在それを使用していないので、この質問は意味がありません。あなたのユーザーの好意を持って、コマンドプロンプトが見えるようにして、何が起こっているかを知ってください。 –
あなたは '動詞 'は必要ありません。それはあなたが何を意味すると思うかを意味するものではありません。おもう。 –
@Ramhound procStartInfo.Arguments = "/ env/user:" + "管理者" + "cmd" + **コマンド**; – purvang