System.Diagnostics.Processクラスを使うと外部のアプリケーションを起動する事が出来る。
また、同様の方法を使って文書ファイルなどを、拡張子で関連付けされたアプリケーションで開く事も出来る。
その他、起動した外部アプリケーションが終了するまで待つようなプログラムも作成出来る。
EXEファイルを起動する
以下はペイントを起動する例。
var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = @"c:\Windows\System32\mspaint.exe"; proc.Start();
StartInfoプロパティのFileNameへ実行したいEXEファイル名をフルパスで指定する。
以下のように1行で書くことも可能。
System.Diagnostics.Process.Start(@"c:\Windows\System32\mspaint.exe");
関連付けされたアプリで文書ファイルを開く
以下はテキストファイルを開く例。
拡張子「.txt」に関連付けされているがメモ帳アプリなどが起動する。
var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = @"c:\MySpace\memo.txt"; proc.StartInfo.UseShellExecute = true; proc.Start();
StartInfoプロパティのFileNameへ開きたい文書ファイル名をフルパスで指定する。
StartInfoプロパティのUseShellExecuteにTrueを指定(規定値はTrue)してOSのシェル機能を使用する事で、拡張子で関連付けられたアプリケーションを使って文書ファイルを開いてくれる。
UseShellExecuteの規定値はTrueなので、以下のように1行で書くことも可能。
System.Diagnostics.Process.Start(@"c:\MySpace\memo.txt");
起動したプリケーションの終了を待つ
var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = @"c:\Windows\System32\mspaint.exe"; proc.Start(); proc.WaitForExit(); MessageBox.Show("終了しました");
6行目のWaitForExitメソッドで起動したプロセスが終了するまで待機している。
起動したアプリケーションの終了を待つ(非同期)
private void Button_Click(object sender, RoutedEventArgs e) { var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = @"c:\Windows\System32\mspaint.exe"; proc.EnableRaisingEvents = true; proc.Exited += Proc_Exited; proc.Start(); } private void Proc_Exited(object sender, EventArgs e) { MessageBox.Show("終了しました"); }
起動したプロセスを非同期的に待機するにはExitedイベントを利用する。
Exitedイベントを使いためにはEnableRaisingEventsプロパティをtrueに設定する必要がある。
コメントをお書きください
FLINE NN (木曜日, 10 3月 2022 08:44)
Loaderを開発していたのですごく役に立ちました!