スライドショー

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

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

佐藤

佐藤

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