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に設定する必要がある。

コメント
コメントを投稿