C#で外部アプリケーションを起動する

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