webentwicklung-frage-antwort-db.com.de

Suchen Sie den Pfad von notepad.exe und mspaint.exe

Was ist der beste Weg, um herauszufinden, wo notepad.exe und mspaint.exe sind, die für verschiedene Windows-Versionen geeignet sind?

Soll ich das Windows-Verzeichnis über SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, dir) erhalten und dann alle Unterverzeichnisse durchsuchen, um nach den beiden Dateien zu suchen?

(Angenommen, ich interessiere mich für nichts außerhalb des Windows-Ordners.)

26

Dies funktioniert auf jeder Windows-Box, auf die ich Zugriff habe (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

Das Tolle ist, dass Sie nicht haben Um den eigentlichen %PATH% zu verwenden, können Sie Ihren eigenen Suchpfad durch eine andere Umgebungsvariable ersetzen.

41
paxdiablo

Wenn Sie das Microsoft Platform SDK installiert haben ( die Version vom Februar 2003 ist das letzte, das mit Microsoft VC6 funktioniert), können Sie das where.exe-Programm (es ist 38 KB, nur 18 KB, wenn Sie es verwenden) ausführen und ausführen

where notepad.exe

hilfe vom Befehl 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

Überprüfen Sie, ob der Schlüssel HKEY_CLASSES_ROOT\Applications\notepad.exe für lokalisierte Versionen gleich ist. Möglicherweise ist der Schlüsselname derselbe und der Wert für Bearbeiten/Öffnen verweist auf das lokalisierte Exe.
Beispiel:

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

Niederländisch:
HKEY_CLASSES_ROOT\Applications\notepad.exe\Shell\edit\command
% SystemRoot%\system32 ** kladblok.exe **% 1

Wenn dies der Fall ist, wird die Registrierung gerade nach diesem Schlüssel durchsucht (das gleiche gilt für den Befehl mspaint).

3
Stefan

Art: 

% windir%\system32\notepad.exe in der Pfadleiste

oder 

C:\Windows\System32 Und finden Sie notepad.exe

* C ist die Festplatte, auf der sich Ihr Betriebssystem befindet :)

3
LukasFT

Um klein anzufangen, sollten Sie zunächst die Umgebungsvariable windir suchen und in den Unterordnern %windir%\system32\ nach mspaint und notepad..__ suchen. Am wahrscheinlichsten werden sie dort sein.

Wenn dies jedoch fehlschlägt, greifen Sie zu einer brutaleren Suche zurück.

2
Roman M

Normalerweise würden Sie sie einfach ausführen. Sie befinden sich in jeder Windows-Version im Systempfad.

Sie können ExpandEnvironmentStrings verwenden. Die Umgebungsvariable, die Sie erweitern möchten, ist WINDIR.

In der Vergangenheit hätten Sie GetWindowsDirectory oder GetSystemDirectory verwenden können, aber ich denke, sie sind veraltet.

2
Bogdan

Da Sie die Frage mit WinAPI markiert haben, würde ich SearchPath () verwenden, z. Im Folgenden wird die Variable path mit dem Ergebnis aufgefüllt.

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

Versuchen Sie, eine DOS-Eingabeaufforderung zu öffnen, wechseln Sie in den Windows-Ordner und führen Sie folgende Schritte aus:

dir notepad.exe /s

Es lebe DOS :)

0
tehvan

Zusammenfassend finde ich, dass der beste Ansatz darin besteht, das Windows\System32-Verzeichnis Und die HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths-Registrierungsschlüssel zu überprüfen.

Allgemeiner finde ich, dass der beste Ansatz ist, ShellExecuteEx nachzuahmen.

Genommen von:
Anwendungsregistrierung (Windows)
https://msdn.Microsoft.com/de-de/library/windows/desktop/ee872121(v=vs.85).aspx

Die Datei wird an folgenden Speicherorten gesucht:
• Das aktuelle Arbeitsverzeichnis.
• Nur das Windows-Verzeichnis (es werden keine Unterverzeichnisse durchsucht).
• Das Windows\System32-Verzeichnis.
• Verzeichnisse, die in der Umgebungsvariable PATH aufgeführt sind.
• Empfohlen: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

Eine weitere Möglichkeit besteht darin, Start Menu\Programs\Accessories, Mithilfe von SHGetFolderPath mit CSIDL_STARTMENU := 11 Und CSIDL_COMMON_STARTMENU := 22 zu überprüfen und die Ziele Aus den lnk-Dateien abzurufen.

0
vafylec

Verwenden Sie die WinAPI-Funktion GetWindowsDirectory (), um den Windows-Ordner abzurufen, und GetSystemDirectory (), um den Windows\System-Ordner abzurufen. Sie funktionieren garantiert mit allen Windows-Versionen seit mindestens Win95; Ich denke, sie waren auch in Win 3.x verfügbar.

0
Ken White