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

따라서 'start'명령을 실행할 때 CMD가 ProgramFiles 및 ProgramFiles (x86) (및 모든 하위 디렉토리)를 자동으로 살펴볼 수 있다는 아이디어를 제공합니까? 그 결과 exe 파일이 다음과 같은 위치에있는 내 컴퓨터 Audacity에 설치된 다른 응용 프로그램을 시작하려고했습니다.

C:\Program Files (x86)\Audacity

놀랍게도 Audacity는 다음과 같이 입력했을 때 시작하지 못했습니다.

start audacity

명령 줄에서.

여기에 이미지 설명을 입력하십시오

그런 다음 audacity.exe를 포함하는 디렉토리를 PATH에 추가했습니다.

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

그 후 나는 대담을 다시 시작하려고 시도했다.

start audacity

놀랍지 않게 Audacity가 시작되었습니다.

내가 알고 싶은 것은 명령 프롬프트가 실행 파일을 정확히 찾는 위치입니다. winword.exe가 포함 된 디렉토리가 PATH의 일부가 아닌 경우에도 왜 winuda.exe가 시작되지만 audacity.exe에 대해 동일한 내용이 적용되지 않습니까?

다른 응용 프로그램도 시도했습니다. 시작 명령을 사용하면 Chrome과 Firefox가 작동합니다.

업데이트 : Windows 버전 6.3.9600 (Windows 8.1)을 실행하고 있습니다


답변:


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 경로

출처 : 출원 등록


15

명령 프롬프트에서 방금 입력 WinWord하면 실행되지 않습니다.

입력 START WinWord하면 실행됩니다.

Start명령이 핵심입니다.

start 명령을 통해 파일을 실행하려고하면 명령 프롬프트가 검색을 수행하지 않습니다. 대신 파일 이름 및 인수를 ShellExecuteEx API 호출을 통해 Windows 자체로 전달한 다음 파일 위치를 검색해야합니다. 다음 순서로 검색하는 장소가 여러 개 있습니다.

  • 현재 작업 디렉토리

  • Windows디렉토리는 (하위 디렉토리는 검색되지 않음).

  • Windows\System32디렉토리.

  • PATH환경 변수에 나열된 디렉토리 .

  • 추천 :
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

WinWord해당 레지스트리 키에 있습니다. 열쇠는 PATH너무 오래 걸리지 않도록하는 것입니다.


7
모든 출처를 인용하고 인용하십시오. 메모리에서 검색 순서를 쓰지 않았다면 목록과 검색 순서를 나타내는 소스를 인용해야합니다.
Ramhound

출처는 몇 년 전에 내가 작업했던 내용의 메모 일 것입니다. 나는 그때 어디서 그것을 집어 왔는지 모른다. 웹 페이지는왔다 갔다했다.
Larryc

5
다른 사람들이 얻은 동일한 문서 에서 가져 왔습니다.
Ramhound

7

Windows 명령 프로세서 (CMD.EXE)의 프로그램 (명령 프롬프트에서 드라이브 / 경로없이 모듈 이름을 지정하는 경우)은 다음과 같이 발견 될 때 시작할 수 있습니다.

  • PATH 환경 변수 별 (실행 파일과 동일한 이름의 하드 링크 / 소프트 링크 / 바로 가기)

  • DOSKEY 별명으로

  • HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths또는 응용 프로그램 경로 별 HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths( start명령 사용시 )

이 지식 (특히 마지막 지식)을 사용하면 편리한 별명을 작성할 수 있습니다. 예를 들어 HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe, 기본값으로 작성 하고 명령 프롬프트 C:\Program Files (x86)\Audacity\Audacity.exe에 입력하여이 응용 프로그램을 시작할 수 있습니다 start au.


0

다른 답변은 귀하의 경우 특정 이유 일 수 있지만 다른 응용 프로그램의 경우와 같이 귀하의 질문에 대한 또 다른 답변이 있습니다.

당신은 특별히 확장자를 가진 파일을 찾고 있다고 말했습니다 exe. Windows는 또한 다른 확장자의 파일을 실행하려고 시도합니다.

명령을 실행할 때 사용되는 또 다른 환경 변수는 변수 PATHEXT입니다. ;실행을 시도하는 파일 확장자 의 구분 된 목록입니다. 반향 PATHEXT하면 .COM;.EXE;.BAT;.CMD;.VBS;... 등과 같은 것을 볼 수 있습니다 . 일부 응용 프로그램은 이러한 다른 파일 형식을 최종 사용자 진입 점으로 사용합니다. 훨씬 덜 일반적이지만 발생합니다. .BAT스크립트 에서 시작하는 몇 가지 주요 상용 제품을 사용했습니다 . 그중 하나를 예제로 사용하려면 ... standalone이 없지만 명령으로 시작할 수 있습니다 standalone.exe. 대신에 standalone.bat.

PATHEXT내가 지금보고 있는 확장 중 일부 는 응용 프로그램을 사용한 적이 없습니다. 이들 이여 나는 것을 훨씬 더 일반적으로 실행 (하지만 분명하지만큼 exe)이다 : .com, .bat, .vbs, .js, .jar. 처음 두 개는 Windows 배치 스크립트 파일이고 다른 세 개는 exes (각각 Visual Basic, javascript 및 java) 대신 스크립트 또는 가상 머신에서 실행되는 특정 프로그래밍 언어의 파일 유형입니다 .


하향식 보살핌은 논평하는 것이 좋습니다 (물론 물어 보는 것이 무의미하지만 때로는 응답을받는 경우가 있습니까)? 어딘가에 실수를 했습니까?
Loduwijk

나뿐만 아니라, 거친 추측으로는 while PATHEXTPATH, 둘 다 작동하는 것과 관련이 있기 때문에 각각의 작업에서 다소 직교합니다. 실행할 항목을 찾을 위치PATH지정 하고 OP가 요청한 내용 을 실행 하는 동안 실행할 수있는 대상 을 지정 합니다. PATHEXT
dgnuff

@dgnuff 흥미로운 점은 제 요점입니다. OP는 구체적으로 프레임 챌린지를 구걸하는 방식으로 질문을 표현했습니다. 이미 경로에서 검색된 장소에서 어쨌든 고마워.
Loduwijk

0

start winword명령 프롬프트가 실행되도록 지시하지 않습니다 winword. start인수 로 시작하도록 명령 프롬프트에 지시합니다 winword. Start찾기 위해 자체 방법을 사용합니다 winword.

그냥 winword발사에 프롬프트 명령을 알려줍니다 winword. 그리고 당신 winwordPATH그것을 시도 하면에 있지 않기 때문에 시작되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.