C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 70 を表示中)
■40863 / )  Re[3]: Process.Startメソッドの引数について
□投稿者/ 魔界の仮面弁士 (1269回)-(2009/09/04(Fri) 17:39:34)
No40850 (らんぺるーる さん) に返信
>>>アプリケーション以外については、ファイル名のみでは、
>>>ファイルの場所がわからず、起動することができません。
>>PATH すら無い場合、複数のフォルダに同じファイル名があった場合に、
>>どれを採用するべきかという優先順位付けができなくなってしまいます。
> PATHに指定されていないフォルダについてもファイルを検索してくれるのでしょうか?
済みません、言葉が足りませんでした。(検索処理時の手順の話をしようとしたつもりでした)

環境変数 PATH から検索される場合、そこに記録されている順番にも実は意味があります。
Windows は基本的に、パスの登録順にプログラムを検索しますので、アプリによっては、
PATH 内の順番を変えると動作しない物も存在しています。

そしてこれが、先の発言における「優先順位」という言葉の意味となっています。


> PATHに指定されたフォルダのみを対象に検索してくれるものと
> 思っておりました。
Process.Start には、PATH 以外の任意の場所から検索実行させる機能はありませんので、
もしも PATH 以外からも実行させたいのであれば、それぞれのディレクトリを走査するための
仕組みを実装し、それを絶対パスに変換して渡す必要があります。

そして検索機能を独自実装する場合、それぞれのディレクトリをどの順番で走査するかによって、
複数の同名ファイルに対する優先順位付けが変わってきますよね。ですから、PATH に相当する
「検索順」を定義するための仕組みを、御自身で定義しなければなりませんね、というのが
先の発言の意図です。失礼しました。


> (PATHに指定されている複数のフォルダに同じ名称のファイルがあった場合は
実際に試してみてください。

> どれを起動するのでしょうかね…。そのような環境はないとは思いますが。)
や、同名ファイルが配置されるのは、さして珍しい話では無いと思いますよ。

ただ、厳密に言うと、参照されるのは PATH だけではありません。
先述したように、カレント ディレクトリも走査対象となります。
(ついでに言うと、実行に際してはレジストリ内の情報も利用されています)

なお、Process.Start の動作は、ShellExecuteEx APIに準じた物となっています。
(なので、パス長の 2000文字制限などもそのまま引き継がれていたりする…)


>>同一ドライブであれば、カレントからの相対パス指定でも良いのかな。
> 先述のとおり、同じフォルダに格納しましたが、毎回呼び出しが
> うまくいくわけではありませんでした。
“同じフォルダに配置する”のではなく、“カレントディレクトリに配置”してみてください。

……というよりは、“配置したディレクトリをカレントにする”、の方が表現としては正しいかな。


>>> 呼び出し元のアプリケーションと同じフォルダに呼び出し先の
>>> アプリケーションを配置したところ、ファイル名のみでも
>>> 呼び出しができることを確認しました。
>> カレント ドライブとカレント ディレクトリが、たまたま
>> アプリケーション フォルダになっていたのでは?
> アプリケーション フォルダの意味を知らなかったので調べたところ、

先の「アプリケーション フォルダ」とは、らんぺるーるさんの発言にある
>>> 呼び出し元のアプリケーションと同じフォルダに
を指した言葉であって、特定の用語というわけではありません。
(「カレント ドライブ」や「カレント ディレクトリ」という用語ならばありますけれども)

ここでいう「アプリケーション フォルダ」とは、大雑把に言えば
「exe 本体の置いてあるディレクトリ」を指していると思っておいてください。
(VB6 では、俗に "App.Path" などと呼ばれる場所です)


> 「Program Files フォルダの下にあるアプリケーション用フォルダ。通常は C:\Program Files\Company Name\App Name」
> とありました。
これは、アプリのインストール先として、その場所が一般的に使われているという事です。
実際には、C:\Program Files\Product Name の形式も多いですけれどね。

> 今回試験をした環境では「Program Files」以下には格納しておりませんでした。
> デスクトップにフォルダを作成して格納しております。
「exe 本体の置いてあるディレクトリ」は、どこであっても構いません。
もちろん、デスクトップでも OK です。

重要なのは、あくまでカレント ディレクトリです。
返信 編集キー/


管理者用

- Child Tree -