重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

前々から不思議に思っていたWindowsの素朴な疑問です。

コマンドプロンプトに実行ファイル名を入れると、カレントフォルダ検索後、PATH環境変数のフォルダを順に検索し、最初に見つかった実行ファイルが起動されます。

ところが、CreateProcess API に実行ファイル名を与えると、PATH環境変数で検索する前に Windows や System32 フォルダが検索されます。

時々これが現場で事故の原因になることがあるのですが、
何故こんな違いがあるのでしょうか?

理由をご存知の方がおられましたらよろしくお願いいたします。

A 回答 (3件)

>時々これが現場で事故の原因になることがあるのですが、



蛇足

事故が想定されるならフルパス指定で実行するのが賢明
    • good
    • 0

http://chokuto.ifdef.jp/urawaza/api/CreateProces …

CreasteProcessAPI の プロセスの元ファイルの検索順序はPATH環境変数だけでは決まらないからです。

この回答への補足

お察しかもしれませんが、実は java.exe の話です。
JDK のは JDKの bin へ JRE は system32 へインストールされるので
コマンドプロンプト、ツールやサーバからの起動で結果が違うことが
しばしば(JDK VM 固有のオプションが無いとか)。

PATHを変更して治らず悩む人が多いんです。

補足日時:2011/09/02 10:15
    • good
    • 0

%PATH%には,通常C:\WindowsやC:\Windows\System32が含まれます。


で,これらを削除したコマンドプロンプトでnotepadと入力すると,notepad.exeは起動しません。
つまり,コマンドプロンプトではカレントディレクトリと%PATH%のみが認識されます。
# STARTを使うと,CreateProcessの順序になります。

CreateProcessの検索順序は以下に書いてあります。
MSDN: CreateProcess Function (Windows)
http://msdn.microsoft.com/en-us/library/ms682425 …
優先順位1位はカレントディレクトリではなく,
> The directory from which the application loaded.
になります。

また,CMD.EXEの検索順序は,以下にあります。
TECHNET: Path
http://technet.microsoft.com/ja-jp/library/cc753 …
ここには,Windowsディレクトリ等の話はまったく出てきません。

コマンドプロンプトから,CreateProcessの順序を使いたい場合は,STARTコマンドを使えばよいです。
    • good
    • 0
この回答へのお礼

おお、start の話は知りませんでした。
有用な情報をありがとうございます。

お礼日時:2011/09/01 14:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!