Подтвердить что ты не робот

Найдите путь к notepad.exe и mspaint.exe

Каков наилучший способ узнать, где notepad.exe и mspaint.exe будут работать в разных версиях Windows?

Должен ли я получить каталог Windows через SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir), а затем пройти через все подкаталоги для поиска двух файлов?

(Предположим, что меня не интересует ничего за пределами папки Windows.)

4b9b3361

Ответ 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" в панель "Имя файла".