2009-02-06 5 views
26

Windows의 다양한 버전에서 작동하는 notepad.exe 및 mspaint.exe의 위치를 ​​찾는 가장 좋은 방법은 무엇입니까?notepad.exe 및 mspaint.exe 경로 찾기

SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir)을 통해 Windows 디렉터리를 가져와야하고 두 개의 파일을 찾기 위해 모든 하위 디렉터리를 통과해야합니까?

(필자는 Windows 폴더 외부 아무것도에 관심이 아니라고 가정합니다.)

+0

당신이 결정하는 해결책이 무엇이든간에, 그것들을 전혀 찾지 않고 * 준비하지 * 마십시오. 일부 시스템에서 둘 중 하나 또는 둘 모두를 삭제했습니다 (왜 메모장을 유지해야합니까?).exe 주위에 내가 메모장을 가지고있다. ++) –

+9

@Stephen : 리소스를 공개하지는 않지만 경량의 작은 것들을 지우는 데있어 중요한 점은 무엇인가? – chiccodoro

답변

0

Windows 폴더에 DOS 프롬프트, 변화를 열고 시도하고 수행

dir notepad.exe /s 

만세 DOS :

+0

기술적으로 정확하지만 brute-force &는 Windows 폴더 내의 내용에만 작동합니다. –

41

이것은 (XP +)에 액세스 할 수있는 모든 Windows 상자에서 작동합니다.

c:\> for %i in (cmd.exe) do @echo %~$PATH:i 
C:\WINDOWS\system32\cmd.exe 

c:\> for %i in (python.exe) do @echo %~$PATH:i 
C:\Python25\python.exe 

의 좋은 점은 실제 %PATH%를 사용하는이 당신이하지 않는, 당신은 다른 환경 변수를 사용하여 자신의 검색 경로를 대체 할 수 있습니다.

+0

실행 파일의 이름이 다르게 지정 될 수 있으므로 많은 지역화 된 Windows 버전에서는 그렇지 않습니다. – peSHIr

+0

그런 다음 현지화 된 이름으로 대체하십시오. Win32 API 어딘가에 WIN_NOTEPAD_REALNAME 상수가 있다고 생각하지 않는 한 모든 솔루션에서 문제가됩니다. – paxdiablo

+5

notepad.exe는 여전히 notepad.exe이고 cmd.exe는 Windows (98, XP, Vista)의 모든 언어 버전에서 여전히 cmd.exe입니다 (약 20 개). 폴더의 이름은 다르게 지정할 수 있지만 실행 파일, 라이브러리 및 기타 중요한 내용은 변환되지 않습니다. 적어도 파일 이름은 아닙니다. – Piskvor

2

나는 작은 것부터 시작하여 windir 환경 변수를 얻고 서브 폴더 %windir%\system32\mspaintnotepad으로 찾아야한다고 생각합니다. 그들이있을 가능성이 큽니다.

그러나 실패하면 더 강력한 검색이 필요합니다.

2

일반적으로 실행하면됩니다. Windows의 모든 버전에서 시스템 경로에 있습니다.

ExpandEnvironmentStrings을 사용할 수 있습니다. 확장 할 환경 변수는 WINDIR입니다.

예전에는 GetWindowsDirectory 또는 GetSystemDirectory을 사용할 수 있었지만 사용하지 않을 수도 있습니다.

3

지역화 된 버전에서 HKEY_CLASSES_ROOT \ Applications \ notepad.exe 키가 같은지 확인하십시오. 어쩌면 키 이름은 같고 편집/열기 값은 지역화 된 exe에 대한 값입니다.
예 :

영어 :
HKEY_CLASSES_ROOT의 \ 응용 프로그램 \ NOTEPAD.EXE의 \ 셸 \ 편집 \ 명령
여기서 % SystemRoot % \ system32를 ** NOTEPAD.EXE ** % 1

네덜란드 :
HKEY_CLASSES_ROOT \ 응용 프로그램 \ NOTEPAD.EXE의 \ 셸 \ 편집 \ 명령
여기서 % SystemRoot % \ system32를 ** kladblok.exe ** % 1

만약의 경우 먹으 렴, 다음의 해당 키에 대한 레지스트리를 확인 막 (동일 mspain에 간다. 티).

+0

그래,이 방법이 가능한 것 같습니다. 제공된 가정. (영어가 아닌 지역화 된 Windows가 아니기 때문에 자신을 확인할 수 없습니다. 여기에 레지스트리를 편집 할 필요가 없습니다 ...) – peSHIr

+0

확인할 가능성이있는 사람은 누구입니까? – Stefan

+0

적어도 독일어 버전에서는 키가 동일하지만 notepad.exe는 여전히 notepad.exe입니다. – Alex

18

이 설치 Microsoft 플랫폼 SDK가있는 경우, 당신이 (당신이 그것을 gzip을 경우는, 단지 18K를 38K의)를 where.exe 프로그램을 잡아 실행할 수 있습니다 (the February 2003 version는 마이크로 소프트 VC6와 함께 작동 마지막입니다)

where notepad.exe 
where 명령

도움 :

WHERE [/R dir] [/Q] [/F] [/T] pattern... 

Description: 
    Displays the location of files that match the search pattern. 
    By default, the search is done along the current directory and 
    in the paths specified by the PATH environment variable. 

Parameter List: 
    /R  Recursively searches and displays the files that match the 
      given pattern starting from the specified directory. 

    /Q  Returns only the exit code, without displaying the list 
      of matched files. (quite mode) 

    /F  Displays the matched filename in double quotes. 

    /T  Displays the file size, last modified date and time for all 
      matched files. 

    pattern Specifies the search pattern for the files to match. 
      Wildcards * and ? can be used in the pattern. The 
      "$env:pattern" and "path:pattern" formats can also be 
      specified, where "env" is an environment variable and 
      the search is done in the specified paths of the "env" 
      environment variable. These formats should not be used 
      with /R. The search is also done by appending the 
      extensions of the PATHEXT variable to the pattern. 

    /?  Displays this help message. 

    NOTE: The tool returns an error level of 0 if the search is 
     successful, of 1 if the search is unsuccessful and 
     of 2 for failures or errors. 

Examples: 
    WHERE /? 
    WHERE myfilename1 myfile????.* 
    WHERE $windir:*.* 
    WHERE /R c:\windows *.exe *.dll *.bat 
    WHERE /Q ??.??? 
    WHERE "c:\windows;c:\windows\system32:*.dll" 
    WHERE /F /T *.dll 
+1

"기본적으로 Windows 7에서 사용할 수 있으며 Vista에서는 가능할 수 있습니다. – KindDragon

0

Windows 폴더를 얻기 위해 WinAPI를 기능 GetWindowsDirectory()를 사용하고, GetSystemDirectory()는 Windows \ System 폴더를 얻을 수 있습니다. Thely는 적어도 Win95 이후 모든 Windows 버전에서 작동하도록 보장됩니다. 나는 그들이 Win 3.x에서도 사용 가능하다고 생각한다.

1

WinAPI로 질문에 태그를 추가 했으므로 SearchPath()과 같이 사용하십시오. 다음은 변수 path을 결과로 채 웁니다.

//Get the full path to notepad 
char path[MAX_PATH] = { 0 }; 
LPSTR* ptr = NULL; 
DWORD dwRet = SearchPath(NULL, "notepad.exe", NULL, MAX_PATH, (LPSTR)path, ptr); 
3

유형 :

% WINDIR % \ system32를 \ notepad.exe를 경로 표시 줄에

또는

가 C thinggy : \ WINDOWS \ system32를 및 notepad.exe를

을 찾을 수

* C는 사용중인 OS가있는 하드 드라이브입니다.

-1

system32 폴더로 이동하여 '파일 이름'표시 줄에 "notepad.exe"를 입력하십시오. 한마디로

0

나는 가장 좋은 방법 은 Windows\System32 디렉토리 과 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths 레지스트리 키를 확인하는 것입니다 찾을 수 있습니다.

더 일반적인 접근 방법은 이 ShellExecuteEx을 모방하는 것입니다. 이 파일은 다음 위치에 받고자
https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx


응용 프로그램 등록 (윈도우) : 현재 작업 디렉토리 •

은에서 촬영.
? Windows 디렉터리 만 (하위 디렉터리는 검색되지 않음).
? Windows \ System32 디렉터리?
• PATH 환경 변수에 나열된 디렉토리.
• 권장 : 마이크로 소프트 \ WINDOWS \ CurrentVersion을 \ 응용 프로그램 경로

\ HKEY_LOCAL_MACHINE \ 소프트웨어 또 다른 가능성 CSIDL_STARTMENU := 11CSIDL_COMMON_STARTMENU := 22SHGetFolderPath을 사용하여 Start Menu\Programs\Accessories, 을 확인하고, 대상에게 LNK 파일에서 을 검색하는 것입니다 .