2009-02-06 5 views
26

Was ist der beste Weg, um herauszufinden, wo Notepad.exe und mspaint.exe sind, die über verschiedene Versionen von Windows funktioniert?Finden Sie den Pfad von notepad.exe und mspaint.exe

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

(Nehmen wir an, ich in etwas außerhalb der Windows-Ordner nicht interessiert.)

+0

Für welche Lösung Sie sich auch entscheiden, seien Sie darauf vorbereitet, sie überhaupt nicht zu finden. Ich habe auf beiden Systemen eines oder beide gelöscht (warum sollte ich den Notizblock behalten).exe um, wenn ich notizblock habe ++) –

+9

@Stephen: Was ist der Sinn beim Löschen solcher leichten Dinge, die nicht wirklich irgendwelche Ressourcen freigeben, sondern nur das Risiko einbringen, einige Programme zu brechen? – chiccodoro

Antwort

0

Versuchen Sie eine DOS-Eingabeaufforderung zum Windows-Ordner zu öffnen und zu tun:

dir notepad.exe /s 

Lang lebe DOS :)

+0

technisch korrekt, aber brute-force & funktioniert nur für Sachen innerhalb des Windows-Ordners –

41

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 

Die große Sache ist, die Sie nicht die tatsächlichen %PATH% verwenden müssen, können Sie Ihren eigenen Suchpfad ersetzen durch eine andere Umgebungsvariable.

+0

Es würde nicht auf vielen lokalisierten Versionen von Windows als die ausführbare Datei könnte anders benannt werden. – peSHIr

+0

Dann ersetzen Sie den lokalisierten Namen. Dies ist ein Problem mit jeder Lösung, es sei denn, Sie denken, dass es irgendwo in der Win32-API eine WIN_NOTEPAD_REALNAME-Konstante gibt. – paxdiablo

+5

notepad.exe ist immer noch notepad.exe und cmd.exe ist immer noch cmd.exe in allen Sprachversionen von Windows (98, XP, Vista), die ich gesehen habe (etwa 20). Ordner können unterschiedlich benannt sein, aber ausführbare Dateien, Bibliotheken und andere wichtige Dinge werden nicht übersetzt - zumindest nicht die Dateinamen. – Piskvor

2

Ich denke, um klein anzufangen, sollten Sie die Umgebungsvariable windir erhalten und in den Unterordnern %windir%\system32\ nach mspaint und notepad suchen. Höchstwahrscheinlich werden sie dort sein.

Wenn dies jedoch fehlschlägt, dann greifen Sie auf eine Suche mit brutalerer Gewalt zurück.

2

Normalerweise würden Sie sie nur ausführen. Sie befinden sich in jeder Version von Windows auf dem Systempfad.

Sie können ExpandEnvironmentStrings verwenden. Die Umgebungsvariable, die Sie erweitern möchten, lautet WINDIR. In der Vergangenheit hätten Sie GetWindowsDirectory oder GetSystemDirectory verwenden können, aber ich denke, dass sie veraltet sind.

3

Überprüfen Sie, ob der Schlüssel HKEY_CLASSES_ROOT \ Applications \ notepad.exe für lokalisierte Versionen identisch ist. Vielleicht ist der Schlüsselname gleich und der Wert für edit/open zeigt auf die lokalisierte exe.
Beispiel:

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

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

Wenn das der Fall ist, dann ist es nur über die Registrierung für diesen Schlüssel (gleich überprüfen geht für den mspain t).

+0

Klingt wie eine praktikable Möglichkeit, dies zu tun, ja. Vorausgesetzt, die Annahme gilt. (Ich kann mich selbst nicht überprüfen, da ich nicht auf einem nicht englisch lokalisierten Windows bin und ich habe keine Bearbeitungsberechtigungen für die Registrierung hier ...) – peSHIr

+0

Wer hat noch die Möglichkeit, das zu überprüfen? – Stefan

+0

zumindest in der deutschen Version der Schlüssel ist der gleiche, aber notepad.exe immer noch heißt notepad.exe – Alex

18

Wenn Sie das Microsoft Platform SDK installiert (the February 2003 version ist die letzte, die mit Microsoft VC6 funktioniert), können Sie das where.exe Programm greifen (es ist 38K, nur 18K, wenn Sie es gzip) und führen

where notepad.exe 

Hilfe vom where Befehl:

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

"wo" in Windows 7 standardmäßig und möglicherweise in Vista – KindDragon

0

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

1

Da Sie die Frage mit WinAPI markiert haben, verwende ich SearchPath() z. Der folgende Eintrag füllt die Variable path mit dem Ergebnis.

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

Typ:

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

oder

C: \ Windows \ System32 und finden notepad.exe

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

-1

Wechseln Sie zum Ordner system32, und geben Sie "notepad.exe" in die Leiste "Dateiname" ein. Kurz

0

In finde ich, dass der beste Ansatz ist das Windows\System32 Verzeichnis und die HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths Registrierungsschlüssel zu überprüfen.

Allgemein finde ich, dass der beste Ansatz ShellExecuteEx zu imitieren ist.

Entnommen:
Anwendungsregistrierung (Windows)
https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx

Die Datei in den folgenden Orten gesucht wird:
• Das aktuelle Arbeitsverzeichnis.
• Nur im Windows-Verzeichnis (keine Unterverzeichnisse werden gesucht).
• Das Verzeichnis Windows \ System32.
• Verzeichnisse, die in der Umgebungsvariablen PATH aufgelistet sind.
• Empfehlung: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ App Paths

Ein weiterer möglicherweise ist Start Menu\Programs\Accessories, von SHGetFolderPath mit CSIDL_STARTMENU := 11 und CSIDL_COMMON_STARTMENU := 22, mit zu überprüfen und den Zielen aus den LNK-Dateien abrufen .