|  C#から外部プログラムを使おう  | 
| 作成日: 2004/4/4 最終更新日: 2005/1/18 | 
| ◆ダウンロード | 
| 
 | 
| ◆インストール | 
| このソフトは .NET + C# で書かれているため,事前に Microsoft .NET Framework の 再頒布パッケージ (23.7 MB) をインストールしておく必要があります. .Net Frameworkがインストールされていれば,実行ファイルを起動すれば動作するはずです. | 
| ◆プロセスの開始 | 
| Internet Explorerを起動して"http://mobiquitous.com/"を開くためのコードは以下のようになります. 
    using System.Diagnostics;
 
    string program = @"C:\Program Files\Internet Explorer\IEXPLORE.EXE";
    string argument = @"http://mobiquitous.com/";
    Process extProcess = new Process();
    extProcess.StartInfo.FileName = program;	//起動するファイル名
    extProcess.StartInfo.Arguments = argument;	//起動時の引数
    extProcess.Start();							//プロセス開始
 | 
| ◆プロセスの停止 | 
| 上記のようにして作成した外部プロセスを終了する場合は,Process.Kill()かProcess.CloseMainWindow()を利用します. if(extProcess!=null) このコードでは外部プロセスだけが終了してくれそうなものですが,なぜかProcess.Kill()を呼び出したスレッド自身も同時に終了されてしまうようです.サンプルプログラムでは,以下のように外部プロセスを担当する専用スレッドを作ることで問題を回避しています.(もっといいやり方があるかもしれませんが…)     using System.Diagnostics;
    using System.Threading;
    Process extProcess = null;
    Thread extThread = null;
    string program = @"C:\Program Files\Internet Explorer\IEXPLORE.EXE";
    string argument = @"http://mobiquitous.com/";
    //外部プロセス処理スレッドの開始&終了
    private void ControlProcess(bool start)
    {
        if(!start && extThread!=null)
        {
            extThread.Abort();
            extThread = null;
        }
        else if(start && extThread ==null)
        {
            extThread = new Thread(new ThreadStart(ProcessWorker));
            extThread.Start();
        }
    }
    //外部プロセスを起動するためのスレッド
    private void ProcessWorker()
    {
        //外部プロセスの起動
        try
        {
            extProcess = new Process();
            extProcess.StartInfo.FileName = program;//起動するファイル名
            extProcess.StartInfo.Arguments = argument;
            extProcess.Start();
        
            //スレッドが終了されるまで待機
            while(true)
            {
                Thread.Sleep(100);
            }
        }
        catch(ThreadAbortException ex)
        {
        }
        catch(Exception ex)
        {
        }
        finally
        {
            if(extProcess!=null)
                extProcess.Kill();	//外部プロセスの終了(同時にこのスレッドも終了される)
            extThread.Abort();
            extThread = null;
        }
    }
このメソッドの使い方は以下のようになります.ControlProcess(true); //外部プロセスを開始 ControlProcess(false); // 外部プロセスを終了 | 
| ◆参考URL | 
| 
 |