2012-01-18 21 views
3

shutdown.exeを使用して一定時間後にコンピュータをシャットダウンするプロセスを作成したいとします。ここで複数の引数を指定したShutdown.exeの処理が動作しない

が私のコードです:

はint型のローカル変数である
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.CreateNoWindow = false; 
startInfo.UseShellExecute = false; 
startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
startInfo.FileName = "shutdown.exe"; 
startInfo.Arguments = "–s –f –t " + seconds; 
Process.Start(startInfo); 

、ユーザーが決定します。

私のコードを実行すると何も起こりません。しかし、私は手動でcmdのプロンプトで入力してください:
shutdown.exe - sの - fのt 999
その後、Windowsはポップアップを作成し、システムが16分でシャットダウンすることを教えてくれます。

複数の引数が原因だと思うのは、実行中のシステムシャットダウンを中止する私の方法が働いていることです(cmd.exeから手動でsystemshutdownを作成しました)。これはstartInfo.Argumentを除き、ほぼ同じです:

ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.CreateNoWindow = false; 
startInfo.UseShellExecute = false; 
startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
startInfo.FileName = "shutdown.exe"; 
startInfo.Arguments = "-a"; 
Process.Start(startInfo); 
+2

は、複数の引数を持つ16分後にマシン実際にシャットダウンしていますか?秒= 1で試しましたか?私が尋ねる理由は、あなたがWindowStyleをHiddenに設定しているという事実には何の支障もないのだろうか? – JohnL

+0

おそらく無意味な考え方ですが、あなたの実行可能ファイルについて何も知らない場合、 'UseShellExecute = true'を指定するとどうなりますか? –

+0

コードをこれに変更すると、何も起こりません。 startInfo.Arguments = "-s -f -t 1"; 私は何か間違っていることを知っています。コマンドプロンプトをすぐに見ることができます。 [リンク](http://img215.imageshack.us/img215/8954/shutdowntimer.png) – Toby

答えて

7

にShutdown.exeの使用方法のメッセージの迅速な検査が、それはスラッシュ次のオプションの引数を期待していることがわかる(「/」)ではないダッシュ(「 - 」) 。

 startInfo.Arguments = "–s –f –t " + seconds; 

付::

ライン交換

 startInfo.Arguments = "/s /f /t " + seconds; 

は、C#は2010年

また表現で私のボックスに作業結果を生成し、標準エラーと標準出力をリダイレクトすることができます起動したプロセスがプログラムによって読み込まれるようにして、実行後に何が起こったのかを知ることができます。これを行うには、Processオブジェクトを格納し、基礎となるプロセスが終了するのを待って、すべてがうまくいったかどうかを確認することができます。

 startInfo.RedirectStandardOutput = true; 
     startInfo.RedirectStandardError = true; 

     Process p = Process.Start(startInfo); 
     string outstring = p.StandardOutput.ReadToEnd(); 
     string errstring = p.StandardError.ReadToEnd(); 
     p.WaitForExit(); 

コマンドラインバージョンは、オプションの「ダッシュ」の接頭辞を受け入れ、C#の実行バージョンがない理由残念ながら、私はあなたを伝えることはできません。しかし、うまくいけば、あなたが何をしているかは、実用的な解決策です。

以下のコードの完全なリスト:

 int seconds = 100; 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     startInfo.CreateNoWindow = false; 
     startInfo.UseShellExecute = false; 
     startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     startInfo.FileName = "shutdown.exe"; 
     startInfo.Arguments = "/s /f /t " + seconds; 
     startInfo.RedirectStandardOutput = true; 
     startInfo.RedirectStandardError = true; 
     Process p = Process.Start(startInfo); 
     string outstring = p.StandardOutput.ReadToEnd(); 
     string errstring = p.StandardError.ReadToEnd(); 
     p.WaitForExit(); 
+0

+1この場合、 '-'は'/'と同様に動作しますが、 (cmd.exeが/に変換されないと仮定すると、これは奇妙です。) –

+0

ありがとうございました。cmdのプロンプトウィンドウがほとんど瞬時に消えてしまったので、私はそのメッセージを受け取っていませんでした。そして、ヘルプはとても長く、スクリーンショットでメッセージをキャプチャできませんでした。あなたがそこに示した出力とエラー処理は非常にうれしいです、もう一度ありがとうございます。 – Toby

+0

私にとってはうまくいきません。プロセスが非常に頻繁に始まり、クラッシュします。何か案は? – Manticore

関連する問題