2009-02-06 38 views
26

Cách tốt nhất để tìm ra nơi notepad.exe và mspaint.exe sẽ hoạt động trên các phiên bản Windows khác nhau?Tìm đường dẫn của notepad.exe và mspaint.exe

Tôi có nên lấy thư mục Windows qua SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir) và sau đó duyệt qua tất cả các thư mục con để tìm hai tệp này không?

(Giả sử rằng tôi không quan tâm đến bất cứ điều gì bên ngoài thư mục Windows.)

+0

Bất kỳ giải pháp nào bạn quyết định, hãy chuẩn bị để * không * tìm thấy chúng. Tôi đã xóa một hoặc cả hai trên một số hệ thống (tại sao tôi nên giữ notepad.exe xung quanh khi tôi có notepad ++) –

+9

@Stephen: Điểm nào trong việc xóa những thứ nhỏ nhẹ như vậy mà sẽ không thực sự phát hành bất kỳ tài nguyên nào nhưng chỉ giới thiệu nguy cơ vi phạm một số chương trình? – chiccodoro

Trả lời

0

Thử mở một dấu nhắc DOS, thay đổi vào thư mục Windows và làm:

dir notepad.exe /s 

dài sống DOS :)

+0

về mặt kỹ thuật chính xác, nhưng sức mạnh vũ phu và chỉ hoạt động đối với nội dung trong thư mục cửa sổ –

41

Tính năng này hoạt động trên mọi hộp Windows mà tôi có quyền truy cập (XP +).

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 

Điều tuyệt vời là, bạn không sử dụng thực tế %PATH%, bạn có thể thay thế con đường tìm kiếm của riêng bạn bằng cách sử dụng một biến môi trường khác nhau.

+0

Nó sẽ không có trên nhiều phiên bản Windows được bản địa hóa vì tệp thực thi có thể được đặt tên khác. – peSHIr

+0

Sau đó, bạn thay thế tên đã bản địa hóa. Đây sẽ là một vấn đề với bất kỳ giải pháp nào trừ khi bạn nghĩ rằng có một hằng số WIN_NOTEPAD_REALNAME ở đâu đó trong API Win32. – paxdiablo

+5

notepad.exe vẫn notepad.exe và cmd.exe vẫn là cmd.exe trong tất cả các phiên bản ngôn ngữ của Windows (98, XP, Vista) tôi đã nhìn thấy (khoảng 20). Các thư mục có thể được đặt tên khác nhau, nhưng các tệp thực thi, thư viện và các nội dung quan trọng khác không được dịch - ít nhất không phải tên tệp. – Piskvor

2

Tôi nghĩ rằng để bắt đầu nhỏ, bạn sẽ nhận được biến môi trường windir và tìm trong các thư mục con %windir%\system32\ cho mspaintnotepad. Rất có thể họ sẽ ở đó.

Tuy nhiên, nếu điều đó không thành công, thì hãy sử dụng tìm kiếm bạo lực hơn.

2

Thông thường, bạn sẽ chỉ thực hiện chúng. Họ đang trên con đường hệ thống trong mọi phiên bản của Windows.

Bạn có thể sử dụng ExpandEnvironmentStrings. Biến môi trường bạn muốn mở rộng là WINDIR.

Trước đây bạn có thể đã sử dụng GetWindowsDirectory hoặc GetSystemDirectory nhưng tôi cho rằng chúng không còn được dùng nữa.

3

Kiểm tra xem khóa HKEY_CLASSES_ROOT \ Applications \ notepad.exe có giống với phiên bản được bản địa hóa không. Có thể tên khóa là giống nhau và giá trị để chỉnh sửa/điểm mở cho exe được bản địa hoá.
Ví dụ:

tiếng Anh:
HKEY_CLASSES_ROOT \ Applications \ notepad.exe \ shell \ chỉnh sửa \ command
% SystemRoot% \ system32 ** notepad.exe **% 1

Hà Lan:
HKEY_CLASSES_ROOT \ Applications \ notepad.exe \ shell \ edit \ command
% SystemRoot% \ system32 ** kladblok.exe **% 1

Nếu trường hợp đó xảy ra, thì chỉ cần kiểm tra sổ đăng ký cho khóa đó (giống nhau đi cho mspain t).

+0

Nghe có vẻ như một cách khả thi để làm điều này, vâng. Miễn là giả định nắm giữ. (Không thể kiểm tra bản thân mình, vì tôi không sử dụng Windows không được bản địa hóa tiếng Anh và tôi không có quyền chỉnh sửa đăng ký tại đây ...) – peSHIr

+0

Bất kỳ ai khác có khả năng kiểm tra? – Stefan

+0

ít nhất trong phiên bản tiếng Đức phím là như nhau, tuy nhiên notepad.exe vẫn được gọi là notepad.exe – Alex

18

Nếu bạn có Microsoft Platform SDK được cài đặt (the February 2003 version là người cuối cùng làm việc với Microsoft VC6), bạn có thể lấy các chương trình where.exe (đó là 38K chỉ 18K, nếu bạn gzip nó) và chạy

where notepad.exe 

sự giúp đỡ từ các lệnh 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

"trong đó" có sẵn trong Windows 7 theo mặc định và có thể trong Vista – KindDragon

0

Sử dụng chức năng WinAPI GetWindowsDirectory() để có được thư mục Windows, và GetSystemDirectory() để có được thư mục Windows \ System. Thely're đảm bảo làm việc với tất cả các phiên bản Windows kể từ ít nhất Win95; Tôi nghĩ rằng họ đã có sẵn trong Win 3.x là tốt.

1

Vì bạn đã gắn thẻ câu hỏi với WinAPI, tôi muốn sử dụng SearchPath() ví dụ: sau đây sẽ điền biến path với kết quả.

//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

Loại:

% windir% \ system32 \ notepad.exe trong thanh đường thinggy

hoặc

C: \ Windows \ System32 và tìm notepad.exe

* C là ổ đĩa cứng có hệ điều hành của bạn được đặt :)

-1

Chuyển đến thư mục system32 và nhập "notepad.exe" vào thanh 'Tên tệp'.

0

Nói tóm lại tôi thấy rằng phương pháp tốt nhất là để kiểm tra Windows\System32 thư mục và các khóa registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths.

Thông thường, tôi thấy rằng cách tiếp cận tốt nhất là bắt chước ShellExecuteEx.

Trích từ:
Đăng ký ứng dụng (Windows)
https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx

Các tập tin được tìm kiếm trong các địa điểm sau:
• Các thư mục làm việc hiện hành.
• Chỉ thư mục Windows (không có thư mục con nào được tìm kiếm).
• Thư mục Windows \ System32.
• Các thư mục được liệt kê trong biến môi trường PATH.
• Khuyến cáo: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths

Một hơn nữa có thể là để kiểm tra Start Menu\Programs\Accessories, bằng cách sử dụng SHGetFolderPath với CSIDL_STARTMENU := 11CSIDL_COMMON_STARTMENU := 22, và lấy các mục tiêu từ các file lnk .

Các vấn đề liên quan