web-dev-qa-db-fra.com

Trouvez le chemin de notepad.exe et mspaint.exe

Quelle est la meilleure façon de savoir où sont notepad.exe et mspaint.exe qui fonctionneront dans différentes versions de Windows?

Dois-je obtenir le répertoire Windows via SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir) , puis parcourir tous les sous-répertoires pour rechercher les deux fichiers?

(Supposons que rien ne m'intéresse en dehors du dossier Windows.)

26
Heng-Cheong Leong

Cela fonctionne sur toutes les machines Windows auxquelles j'ai accès (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

Le grand avantage est que vous n'avez pas à utiliser le %PATH%, vous pouvez remplacer votre propre chemin de recherche en utilisant une variable d'environnement différente.

41
paxdiablo

Si Microsoft Platform SDK est installé ( la version de février 2003 est la dernière qui fonctionne avec Microsoft VC6), vous pouvez récupérer le programme where.exe (38 Ko, seulement 18 Ko si vous le gzipz) et exécuter

where notepad.exe

aide de la commande 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
18
Jason S

Vérifiez si la clé HKEY_CLASSES_ROOT\Applications\notepad.exe est identique sur les versions localisées. Peut-être que le nom de la clé est identique et que la valeur pour edit/open pointe vers l'exe localisé.
Exemple:

Anglais:
HKEY_CLASSES_ROOT\Applications\notepad.exe\Shell\edit\command
% SystemRoot%\system32 ** NOTEPAD.EXE **% 1

Néerlandais:
HKEY_CLASSES_ROOT\Applications\notepad.exe\Shell\edit\command
% SystemRoot%\system32 ** kladblok.exe **% 1

Si c'est le cas, il est sur le point de vérifier le registre pour cette clé (la même chose vaut pour mspaint).

3
Stefan

Type: 

% windir%\system32\notepad.exe dans la barre de chemin

ou 

C:\Windows\System32 Et trouvez notepad.exe

* C est le disque dur sur lequel se trouve votre système d'exploitation :)

3
LukasFT

Je pense que pour commencer petit, vous devriez obtenir la variable d'environnement windir et regarder dans les sous-dossiers %windir%\system32\ pour mspaint et notepad. Ils seront probablement là.

Cependant, si cela échoue, eh bien, faites appel à une recherche plus brutale.

2
Roman M

Normalement, vous ne feriez que les exécuter. Ils sont sur le chemin du système dans chaque version de Windows.

Vous pouvez utiliser ExpandEnvironmentStrings . La variable d'environnement que vous souhaitez développer est WINDIR.

Dans le passé, vous auriez pu utiliser GetWindowsDirectory ou GetSystemDirectory, mais je pense qu'ils sont obsolètes.

2
Bogdan

Puisque vous avez balisé la question avec WinAPI, je voudrais utiliser SearchPath () p. Ex. Ce qui suit va peupler la variable path avec le résultat.

//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);
1
nabiy

Ouvrez une invite DOS, ouvrez le dossier Windows et procédez comme suit:

dir notepad.exe /s

Longue vie au DOS :)

0
tehvan

En bref, je trouve que la meilleure approcheest de vérifier le répertoire Windows\System32 .__ et la clé de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths.

Plus généralement, j'estime que la meilleure approche est de mimer ShellExecuteEx.

Pris à partir de:
Enregistrement d'application (Windows)
https://msdn.Microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx

Le fichier est recherché aux endroits suivants:
• Le répertoire de travail actuel.
• Le répertoire Windows uniquement (aucun sous-répertoire n’est recherché).
? Le répertoire Windows\System32.
• Répertoires répertoriés dans la variable d’environnement PATH.
• Recommandé: chemins d'accès HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App

Une autre possibilité consiste à vérifier Start Menu\Programs\Accessories, .__ en utilisant SHGetFolderPath avec CSIDL_STARTMENU := 11 Et CSIDL_COMMON_STARTMENU := 22 et à extraire les cibles Des fichiers lk.

0
vafylec

Utilisez la fonction WinAPI GetWindowsDirectory () pour obtenir le dossier Windows et GetSystemDirectory () pour obtenir le dossier Windows\System. Ils sont assurés de fonctionner avec toutes les versions de Windows depuis au moins Win95; Je pense qu'ils étaient également disponibles dans Win 3.x.

0
Ken White