前回からずいぶんと間が空いてしまいました
今回は、System.Diagnostics.Process クラスの Start メソッドを利用してアプリケーションを実行する際に、Process.StartInfo.FileName プロパティに設定するファイル名がフルパス名ではなかった場合に、指定したアプリケーションのパスがきちんと通って、かつ実体が存在しているかをチェックする必要があったため調べてみたのですが、なんとなく .net の標準機能ではそこまでチェックできそうにありませんでした
(Process.Start メソッド自体は、パスさえ通っていればフルパス名ではなくとも実行してくれます)
そこで、素直に環境変数を取得して「PATH」に登録されているパスと結合しながらチェックしていく方法を紹介します
まず、環境変数が設定されている場所は言うまでもないと思いますが、「マイコンピュータ」を右クリックして「プロパティ」を開くと(Vistaと7はシステムダイアログから、さらにシステムの詳細設定を選択)「システムのプロパティ」ダイアログが開きます
ここから、「詳細設定」タブから、「環境変数」のボタンを選択します
.net プログラムからの環境変数の取得自体はとても簡単です
// 環境変数の取得(PATH要素) string variable = System.Environment.GetEnvironmentVariable( "Path", System.EnvironmentVariableTarget.Process ); // パスの分割 string[] list = variable.Split( ';' ); foreach( var path in list ) { // 実体の存在チェック if( System.IO.File.Exists( System.IO.Path.Combine( path, "explorer.exe" ) ) ) { break; } }
上記のソースを実行すると、「explorer.exe」は foreach 文の path 変数が「C:\Windows」のときに Exists メソッドが true を返すことが確認できます
本当は、Exists メソッドがパスが通っているかをチェックしてくれるオーバーロードを持ってくれるといいのですが・・・
コメントを残す
コメントを投稿するにはログインしてください。