C#から別のプログラムを実行する方法とは?方法から引数実行まで解説

C#で外部のプログラムを 起動する方法

C#から別のプログラムを実行したい。

引数を設定して別のプログラムを起動してみたいけど
方法が分からない……

こんにちは。文系出身エンジニアの佐藤です。

皆さんはC#で作ったプログラムから、別のアプリケーションを呼び出したことはありますか?

方法は意外と簡単で、今後プログラミングしていく中で役に立つ可能性が高いので是非覚えておきたいテクニックの一つです。

この記事では、サンプルコードを使って別のプログラム・アプリケーションを呼び出す方法を解説していきます。

外部プログラムを実行する方法

この章では外部プログラムの起動方法を具体的に解説していきます。

基本の方法

まずは基本の方法です、フォームのボタンを押下したらメモ帳が起動するように作ってみましょう!

using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace WindowsFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ProcessStartInfo pInfo = new ProcessStartInfo();
            pInfo.FileName = "notepad";

            Process.Start(pInfo);

        }
    }
}

メモ帳ボタン(button1)を押すと、メモ帳が起動します。

まずは、System.DiagnosticsにあるProcessStartInfoクラスを使って起動するプログラムの設定をしましょう。FileNameに起動したいexeのパス(c:\~から指定)を入力します。

メモ帳はnotepadと指定するだけで開くようになっているので、今回はパスではなく「notepad」と書きます。

そしてSystem.Diagnosticsにある、ProcessクラスStartメソッドを使い外部プログラムを起動することが出来ます。先程設定したProcessStartInfoを書きましょう。

とても簡単ですよね! 次に、起動したプログラムが終了するまで待機する方法を紹介します。

起動したプログラムが終了するまで待つ方法

起動したプログラムが終了するまで、C#で作ったプログラムは動かせないようにしたい。そんなときには、終了するまで待機させる方法を使ってみましょう。

先程のサンプルコードでは、ボタンを押した回数分メモ帳が起動してしまいますが、待機させる方法ならプログラムが動作途中で止まっているためメモ帳は一個しか起動しません。

さっそくサンプルコードを見てみましょう。

using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace WindowsFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ProcessStartInfo pInfo = new ProcessStartInfo();
            pInfo.FileName = "notepad";

            Process p = Process.Start(pInfo);

            p.WaitForExit();
            MessageBox.Show("メモ帳が終了しました");

        }
    }
}

このサンプルコードなら、メモ帳を起動しているあいだC#側は動かすことが出来ません。

ProcessクラスのWaitForExitメソッドをつかって終了を待機させましょう。分かりやすいよう、メモ帳が終了した時にメッセージボックスが出るようにしてあります。

こちらは、状況に応じて使い分けてみてくださいね。

次に、起動時に引数を渡したい時の方法を紹介します。

起動時に引数を設定する方法

外部プログラムを引数ありで起動したい時には、起動時に引数を指定するだけで大丈夫なんです。

メモ帳に引数でファイルパスを指定すると、そのテキストを開いてくれるのでやってみましょう。

using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace WindowsFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ProcessStartInfo pInfo = new ProcessStartInfo();
            pInfo.FileName = "notepad";
            pInfo.Arguments = @"C:\sato\StartTest.txt";

            Process.Start(pInfo);

        }
    }
}

引数はArgumentsに設定します。もし複数の引数がある場合は次のように入力します。

pInfo.Arguments = @"C:\sato\StartTest.txt test 1";

文字列の中でスペースを使い区切って入力しましょう。

このサンプルコードを実行した結果はこんな感じになります、ちゃんと指定したテキストが開かれていますよね。

これで外部プログラムを起動する方法は完璧です! 最後に注意点を確認しておきましょう。

外部プログラムを実行する時の注意点

外部プログラムを起動する時に注意するべき点は、ProcessStartInfoのUseShellExecuteTrueに設定することです。

pInfo.UseShellExecute = true;

メモ帳なら設定しなくても起動しますが、他のシステムはこちらを設定しないと起動できないことが多いので、上手くいかないという方はこちらを確認してみてください。

まとめ

C#から外部のプログラムを起動する方法を解説しました。

フォームアプリなどでは役に立ちそうですよね、この方法をつかっていろいろなモノを作り慣れていきましょう!

それでは、また次の解説で。

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

佐藤

佐藤

文系大学出身、なんとか自力で頑張りプログラマー歴今年で8年目。
自力で頑張って勉強した経験を生かし、読者の皆様に分かりやすく親しみやすい記事を書けるよう日々邁進中です。
出来る言語はC#,VB,Java,Delphiなどなど、幅広く触っています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説