Windowsコマンドプロンプトは、アプリケーションプログラムの起動時に、PATH変数で指定された場所以外の場所を検索しますか?


35

私は次の実験を試みました。

開始する前に、cmdからPATH変数をチェックしました。この変数の値は次のとおりです。

Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramData\Lenovo\ReadyApps;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Calibre2\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;

最初は、cmdはPATH変数に含まれるディレクトリでのみ実行可能ファイルを検索すると考えたため、winword.exe(Microsoft Word)というアプリケーションをランダムに選択し、コマンドラインから起動しようとしました。

start winword

しかし、驚いたことに、プログラムが起動します!私が驚いた理由は、「winword」というexeファイルのPATH変数内のすべてのディレクトリを検索したが、検索がすべて空になったためです!

したがって、コマンドプロンプトは、実行可能ファイルを探すためにPATH変数で指定された場所以外の場所を検索する必要があると結論付けました。

したがって、明らかに、次にしたことは、「winword」実行可能ファイルが置かれている正確な場所を探すことでした。winword.exeは次の場所にあることがわかります。

C:\Program Files\Microsoft Office 15\root\office15

したがって、「開始」コマンドを実行するときにCMDがProgramFilesとProgramFiles(x86)(およびそれらのすべてのサブディレクトリ)を自動的に調べる可能性があるという考えを教えてくれますか?そのため、コンピューターにインストールされている別のアプリケーションAudacityを、exeファイルを次の場所に起動しようとしました。

C:\Program Files (x86)\Audacity

繰り返しになりますが、驚いたことに、Audacityは次のように入力しても起動に失敗しました。

start audacity

コマンドラインで。

ここに画像の説明を入力してください

次に、audacity.exeを含むディレクトリをPATHに追加しました。

set path=%path%;C:\Program Files (x86)\Audacity

その後、私は再びaudacityを起動しようとしました:

start audacity

さて、驚くことではありませんが、Audacityが起動しました。

私が知りたいのは、コマンドプロンプトが正確に実行可能ファイルを探す場所ですか?winword.exeを含むディレクトリがPATHの一部ではない場合でもwinword.exeが起動するのはなぜですか?しかし、audacity.exeでも同じことは当てはまりませんか?

他のアプリケーションも試しました。startコマンドを使用すると、ChromeとFirefoxが動作します。

更新: Windowsバージョン6.3.9600(Windows 8.1)を実行しています


1
約1年半前のカイル・デラニーの質問に対する私の答えの中核は、この質問にも対応しています。
-TOOGAM

回答:


44

最初、cmdはPATH変数に含まれるディレクトリでのみ実行可能ファイルを検索すると考えたため、winword.exe(Microsoft Word)というアプリケーションをランダムに選択し、コマンドラインから起動しようとしました。

理由winword.exeは、Microsoft Word(Winword.exe)へのパスを定義したレジストリキーが存在するためです。これらのアプリケーションがインストールされている場合、Firefox.exeとChrome.exeにも同様のキーが存在します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

私が知りたいのは、コマンドプロンプトが正確に実行可能ファイルを探す場所ですか?

システムPATH変数、ユーザーPATH変数、および内のさまざまなキー..\App Paths。私は、Audacityがインストールされたときにそれ自体のキーを作成しないことを確認できました。

ShellExecuteEx関数がlpFileパラメーターに実行可能ファイルの名前で呼び出されると、関数がファイルを探す場所がいくつかあります。アプリケーションをApp Pathsレジストリサブキーに登録することをお勧めします。これにより、アプリケーションがシステムPATH環境変数を変更する必要がなくなります。

  • 現在の作業ディレクトリ。
  • Windowsディレクトリのみ(サブディレクトリは検索されません)。
  • Windows \ System32ディレクトリ。
  • PATH環境変数にリストされているディレクトリ。
  • 推奨:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths

ソース:アプリケーション登録


15

コマンドプロンプトから入力するだけWinWordでは実行に失敗します。

入力するSTART WinWordと実行されます。

Startコマンドはここで重要です。

startコマンドを使用してファイルを実行しようとすると、コマンドプロンプトは検索を実行しません。代わりに、ファイル名(および引数)をWindows自体に(ShellExecuteEx API呼び出しを介して)渡し、ファイルの場所を検索する必要があります。次の順序で検索する場所がいくつかあります。

  • 現在の作業ディレクトリ。

  • Windowsディレクトリには、のみ(サブディレクトリが検索されません)。

  • Windows\System32ディレクトリ。

  • PATH環境変数にリストされているディレクトリ。

  • 推奨:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

WinWordそのレジストリキーにあります。重要なのは、PATH長すぎないようにすることです。


7
すべてのソースを引用して引用してください。メモリから検索順序を記述していない限り、検索したリストと順序を示すソースを引用する必要があります。
ラムハウンド

ソースは、私が数年前に取り組んでいたものからのメモです。私はそれをどこで拾ったのかわかりません、ウェブページが行き来します。
ラリーク

5
他の誰もが入手した同じドキュメントから入手しました。
ラムハウンド

7

Windowsコマンドプロセッサ(CMD.EXE)のプログラム(コマンドプロンプトでドライブ/パスなしでモジュール名を指定した場合)は、見つかったときに起動できます。

  • PATH環境変数(同じ名前の実行可能ファイルとそのhardlink / softlink / shortcutの両方)

  • DOSKEYエイリアスによる

  • HKLM\Software\Microsoft\Windows\CurrentVersion\App Pathsまたはからのアプリケーションパス別HKCU\Software\Microsoft\Windows\CurrentVersion\App Pathsstartコマンドを使用する場合)

この知識(特に最後の知識)を使用すると、便利な独自のエイリアスを作成できます。たとえばHKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe、デフォルト値で作成し、コマンドプロンプトでC:\Program Files (x86)\Audacity\Audacity.exe入力start auするだけでこのアプリケーションを起動できます。


0

他の答えはあなたの場合の特定の理由である可能性が高いですが、他のいくつかのアプリケーションの場合である可能性がありますあなたの質問に対する別の答えもあります。

具体的には、拡張子がのファイルを検索していると言いましたexe。Windowsは、他の拡張子のファイルも実行しようとします。

コマンドを実行するときに作用する別の環境変数はvariableですPATHEXT。これは、;実行を試みるファイル拡張子の区切りリストです。エコーPATHEXTすると、.COM;.EXE;.BAT;.CMD;.VBS;...(など)が表示される場合があります。一部のアプリケーションは、これらの他のファイルタイプをエンドユーザーエントリポイントとして使用します。あまり一般的ではありませんが、起こります。.BATスクリプトから始まるいくつかの主要な商用製品を使用しました。それらの1つを例として使用するstandaloneには、standalone.exe... がなくてもコマンドを使用して開始できます。代わりにがありstandalone.batます。

私がPATHEXT今見ている拡張機能のいくつかは、アプリケーションを使用したことがありません。もの、私がすることをしているはるかに一般的に実行します(ただし、明らかでない限りexe)は:.com.bat.vbs.js.jar。最初の2つはWindowsバッチスクリプトファイルであり、他の3つはexes ではなくスクリプトまたは仮想マシンから実行される特定のプログラミング言語のファイルタイプです(それぞれ:Visual Basic、javascript、およびjava)。


コメントするための支持者の気遣い(私はそれが尋ねるのが通常無益であることを知っています、しかし時々私は応答を得ます)?どこかで間違えましたか?
ロドワイク

一方であるためではない私が、野生の推測でそれだPATHEXTPATH、両方実行しているものを得ることに関連している、彼らはそれぞれのタスクでやや直交しています。 実行するものを探す場所PATH指定し、OPが要求していたものを指定し、実行できるものを指定します。PATHEXT
dgnuff

@dgnuff興味深いのは、それが私のポイントだったからです:OPはフレームチャレンジを懇願するような方法で質問を具体的に言いました... SEの用語では、実行されているファイルがすでにパス上で検索されていた場所。とりあえずありがとう。
ロドワイク

0

start winwordコマンドプロンプトに起動を指示しませんwinwordstart引数を指定して起動するようにコマンドプロンプトに指示しますwinwordStart独自のメソッドを使用してを見つけますwinword

winwordコマンドプロンプトに起動するよう指示するだけwinwordです。試してみると、winwordはにないPATHので起動しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.