Найдите путь к notepad.exe и mspaint.exe
Каков наилучший способ узнать, где notepad.exe и mspaint.exe будут работать в разных версиях Windows?
Должен ли я получить каталог Windows через SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir)
, а затем пройти через все подкаталоги для поиска двух файлов?
(Предположим, что меня не интересует ничего за пределами папки Windows.)
Ответы
Ответ 1
Это работает в каждом окне Windows, к которому у меня есть доступ (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
Самое замечательное: вам не нужно использовать фактический %PATH%
, вы можете заменить свой собственный путь поиска, используя другую переменную среды.
Ответ 2
Если у вас установлен пакет Microsoft Platform SDK ( версия в феврале 2003 года - последняя, которая работает с Microsoft VC6), вы можете захватить where.exe
(это 38K, только 18K, если вы gzip его) и запустите
where notepad.exe
help из команды 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
Ответ 3
Проверьте, совпадает ли ключ HKEY_CLASSES_ROOT\Applications\notepad.exe в локализованных версиях. Возможно, имя ключа такое же, и значение для редактирования/открытия указывает на локализованный exe.
Пример:
Английский:
HKEY_CLASSES_ROOT\Applications\notepad.exe\оболочки\редактировать\команда
% SystemRoot%\system32 ** NOTEPAD.EXE **% 1
голландский:
HKEY_CLASSES_ROOT\Applications\notepad.exe\оболочки\редактировать\команда
% SystemRoot%\system32 ** kladblok.exe **% 1
Если это так, то это просто проверка реестра для этого ключа (то же самое касается mspaint).
Ответ 4
Тип:
% WINDIR%\system32\notepad.exe
в строке пути
или
C:\Windows\System32
и найдите notepad.exe
* C - это жесткий диск, на котором расположена ваша ОС:)
Ответ 5
Думаю, чтобы начать с малого, вы должны получить переменную среды windir
и посмотреть в подпапках %windir%\system32\
для mspaint
и notepad
.
Скорее всего, они будут там.
Однако если это не удается, тогда прибегните к поиску более грубой силы.
Ответ 6
Обычно вы просто выполняете их. Они находятся на системном пути в каждой версии Windows.
Вы можете использовать ExpandEnvironmentStrings
. Переменная среды, которую вы хотите развернуть, WINDIR
.
В прошлом вы могли использовать GetWindowsDirectory
или GetSystemDirectory
, но я думаю, что они устарели.
Ответ 7
Поскольку вы отметили вопрос с помощью 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);
Ответ 8
Попробуйте открыть приглашение DOS, перейдите в папку Windows и выполните:
dir notepad.exe /s
Долгое время DOS:)
Ответ 9
Используйте WinAPI-функцию GetWindowsDirectory(), чтобы получить папку Windows и GetSystemDirectory(), чтобы получить папку Windows\System. Гарантируется, что он будет работать со всеми версиями Windows, по крайней мере с Win95; Я думаю, что они были доступны и в Win 3.x.
Ответ 10
Короче говоря, я считаю, что лучший подход
является проверка
Windows\System32
каталог
и ключи реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
.
В более общем плане я считаю, что лучший подход
должен имитировать ShellExecuteEx
.
Снято с:
Регистрация приложений (Windows)
https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx
Файл запрашивается в следующих местах:
• Текущий рабочий каталог.
• Только каталог Windows (поиск подкаталогов не выполняется).
• Каталог Windows\System32.
• Каталоги, перечисленные в переменной среды PATH.
• Рекомендуется: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Пути приложений
Далее возможно проверить Start Menu\Programs\Accessories
,
используя SHGetFolderPath
с CSIDL_STARTMENU := 11
и CSIDL_COMMON_STARTMENU := 22
, и получить цели
из файлов lnk.
Ответ 11
Перейдите в папку system32 и введите "notepad.exe" в панель "Имя файла".