ZAKO-PG

こんなザコがプログラマーなの?

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

スポンサーリンク

ビビっちゃうくらい更新してなくて申し訳ございませんでした……。

仕事が忙しかったり、そもそも大したコード書いてなかったりして、ブログに書くことがなかったです^^;

ブログタイトルにもなっているように、雑魚プログラマーですので、今回も大したことないことを書いていきます!

そもそもなぜ外部アプリを実行?

そもそも論、なんで外部アプリを実行するか?という仕様ですが、

なんでもボタンをポチッとクリックして、指定パスをエクスプローラーで開きたいとのことでした。

それ必要か……?と思いますが、まあ私たち雑魚プログラマーは反論するすべがありませんので、顧客のために粛々と実装をしていきます。

様々なアプリに対応するには

今回はWindowsユーザーしかいませんが、とはいえアプリは多種多様です。

テキストファイル、PDF、Excel、Word…etc

これらをすべてswitchで分けるのはあほらしいので、コマンドプロンプトのstartにすべての願いを託しました!

startで実行すれば、各ユーザーのデフォルトアプリで開いてくれます。
例えばWebページを指定した場合、ブラウザのデフォルトアプリによっては、あるユーザーはEdge、別のユーザーChromeで開くようになります。

また、switchで大量に分けてコード量を増やすよりも、コマンドプロンプト>startの方がスッキリします。

ちなみに、/c startで実行すると、実行後にコマンドプロンプトが閉じてくれます。これでユーザーには黒い画面を見せずにアプリが開くというわけです。

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

using System; 
using System.Windows.Forms; 
namespace WindowsFormsApp 
{
	public partial class Form1 : Form 
	{ 
		public Form1() 
		{ 
			InitializeComponent(); 
		} 
		
		private void button1_Click(object sender, EventArgs e) 
		{
			ProcessStartInfo process = new ProcessStartInfo(); 
			//ComSpec(cmd.exe)のパスを取得して、FileNameプロパティに指定
			process.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
			//ウィンドウを表示しないようにする
			process.StartInfo.CreateNoWindow = true;
			//コマンドラインを指定("/c"は実行後閉じるために必要)
			process.StartInfo.Arguments = @"/c start D:\Temp\test.txt"; 

			//起動
			process.Start();
			//今回は開くだけOKなのですぐ破棄
			process.Dispose(); 
		} 
	} 
} 

まとめ

コードよりも仕様で苦しめられたケースでした。

書いてしまえば簡単ですが、私のようなへっぽこプログラマーにとっては考え付くのに時間がかかりましたね…。

こんな感じでカスプログラマーの奮闘記を今後も書いていきたいと思いますので、同じく底辺プログラマーの方は参考にしていってください^^;