2011-09-30 28 views
8

は私のコードです:私はコマンドと一緒にcmdを管理者として実行するには?ここ

procStartInfo.UseShellExecute = true 
procStartInfo.RedirectStandardInput = false; 

を維持したい

try 
{ 
    ProcessStartInfo procStartInfo = new ProcessStartInfo(
              "cmd.exe", 
              "/c " + command); 
    procStartInfo.UseShellExecute = true; 
    procStartInfo.CreateNoWindow = true; 
    procStartInfo.Verb = "runas"; 
    procStartInfo.Arguments = "/env /user:" + "Administrator" + " cmd" + command; 

    ///command contains the command to be executed in cmd 
    System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
    proc.StartInfo = procStartInfo; 
    proc.Start(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

process.standardinputを使用せずにコマンドを実行することが可能ですか? 引数に渡したコマンドを実行しようとしましたが、コマンドは実行されません。

+0

**はprocess.standardinputを使用せずにコマンドを実行することが可能ですか?私は引数に渡したコマンドを実行しようとしますが、コマンドは実行されません。**あなたは現在それを使用していないので、この質問は意味がありません。あなたのユーザーの好意を持って、コマンドプロンプトが見えるようにして、何が起こっているかを知ってください。 –

+1

あなたは '動詞 'は必要ありません。それはあなたが何を意味すると思うかを意味するものではありません。おもう。 –

+0

@Ramhound procStartInfo.Arguments = "/ env/user:" + "管理者" + "cmd" + **コマンド**; – purvang

答えて

1

なぜプロセスオブジェクトを引数で初期化し、後でそれらの引数をオーバーライドしますか?とbtw:引数を設定する最後のビット 'cmd'を右に 'cmd'を連結します。それはあまり意味がなく、失敗した場所(スペースがないようです)です。

また、現在標準のコマンドラインを使用していますが、代わりにthe runas toolを使用することを検討してください。コマンドラインからrunasを呼び出すこともできます。

また、コマンドラインから 'command'を実行しているのはなぜですか? Process.Startから直接起動してみませんか。

Process p = Process.Start(new ProcessStartInfo() 
{ 
    FileName = <your executable>, 
    Arguments = <any arguments>, 
    UserName = "Administrator", 
    Password = <password>, 
    UseShellExecute = false, 
    WorkingDirectory = <directory of your executable> 
}); 
+0

アイデアありがとうが、私はprocess.start.can中に管理者権限を与える方法を知っていません。サンプルコードやサンプルがありますか? – purvang

+0

いくつかの擬似コードで回答を更新 – mtijn

5

@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(); 
     } 
+0

cmd runas/env/userで提案した次のコマンドを実行しました:Administrator "cmd/K \" dir c:\\\ ""パスワードを入力してもパスワードを尋ねますcmd/k "dir c:\" – purvang

+0

runas/env/user:Administrator "cmd/K \" dir c:\\\ "" 'または' cmd runas/envを実行しましたか?/user:管理者 "cmd/K \" dir c:\\\ "" '?最初はあなたが走っていたはずのものです。 –

+0

runas/env/user:Administrator "cmd/K \" dir c:\\\ ""として実行しますが、次のようなエラーが表示されます。cmd/k "dir c:\"を実行できません。 – purvang

関連する問題