ビビっちゃうくらい更新してなくて申し訳ございませんでした……。
仕事が忙しかったり、そもそも大したコード書いてなかったりして、ブログに書くことがなかったです^^;
ブログタイトルにもなっているように、雑魚プログラマーですので、今回も大したことないことを書いていきます!
そもそもなぜ外部アプリを実行?
そもそも論、なんで外部アプリを実行するか?という仕様ですが、
なんでもボタンをポチッとクリックして、指定パスをエクスプローラーで開きたいとのことでした。
それ必要か……?と思いますが、まあ私たち雑魚プログラマーは反論するすべがありませんので、顧客のために粛々と実装をしていきます。
様々なアプリに対応するには
今回は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(); } } }
まとめ
コードよりも仕様で苦しめられたケースでした。書いてしまえば簡単ですが、私のようなへっぽこプログラマーにとっては考え付くのに時間がかかりましたね…。
こんな感じでカスプログラマーの奮闘記を今後も書いていきたいと思いますので、同じく底辺プログラマーの方は参考にしていってください^^;