Exe-Dateien in System32 vorhanden oder nicht?
Hallo,
ich stieß auf eine Merkwürdigkeit, die ich mir nicht erklären kann.
Es geht um die Anwesenheit von Exe-Dateien in Windows (7x64Pro).
Liste ich in einer Eingabeaufforderung alle Exes aus System32 auf
so erhalte ich diverse Treffer.
Mach ich das Gleiche aus
so erhalte ich ebenfalls diverse Treffer.
Die Listen von
Einige Dateien sind nur in der einen oder der anderen Auflistung vorhanden, wobei die Schnittmenge recht groß ist, aber keine der beiden Listen ist eine wahr Untermenge der Anderen.
Als Beispiel nehme ich die tskill.exe.
Laut
Konsequenterweise wirkt sich das auch auf die Nutzbarkeit aus.
Aus einer Eingabeaufforderung heraus ist diese Exe benutzbar:
(Notepad wird abgeschossen.)
Führe ich denselben Befehl mit
So erhalte ich eine Exception: Das System kann die angegebene Datei nicht finden
Mit einem
Bei C:\Windows\System32\explorer.exe ist es übrigens genau umgekehrt.
Es gibt auch noch den Ordner
C:\Windows\SysWOW64 aber in dem ist tskill.exe auf beide Arten nicht zu finden.
tskill.exe habe ich dann noch in diesem Ordner gefunden:
C:\Windows\winsxs\amd64_microsoft-windows-t..es-commandlinetools_31bf3856ad364e35_6.1.7600.16385_none_40a54b0d12b542e8
und dort ist es von
Ich würde aber echte Dateien (keine Verknüpfungen, Aliase oder sonstig "Virtuelles") eher in System32 erwarten, als in winsxs.
Was hat sich Microsoft dabei gedacht?
Okay, die Frage ziehe ich zurück.
Letztendlich geht es mir nur darum, wie und womit ich einer Datei ansehen kann, ob sie wirklich vorhanden ist?
Gruß Frank
ich stieß auf eine Merkwürdigkeit, die ich mir nicht erklären kann.
Es geht um die Anwesenheit von Exe-Dateien in Windows (7x64Pro).
Liste ich in einer Eingabeaufforderung alle Exes aus System32 auf
dir C:\Windows\System32\*.exe
so erhalte ich diverse Treffer.
Mach ich das Gleiche aus
c#
herausstring dateiliste = System.IO.Directory.GetFiles("C:\\Windows\\System32", "*.exe", SearchOption.TopDirectoryOnly);foreach (string dateiname in dateiliste) {ausgabetextbox.Text += dateiname + "\r\n";};
so erhalte ich ebenfalls diverse Treffer.
Die Listen von
dir
und von c#
sind aber merkwürdigerweise nicht deckungsgleich.Einige Dateien sind nur in der einen oder der anderen Auflistung vorhanden, wobei die Schnittmenge recht groß ist, aber keine der beiden Listen ist eine wahr Untermenge der Anderen.
Als Beispiel nehme ich die tskill.exe.
Laut
dir
ist sie vorhanden aber laut c#
nicht.Konsequenterweise wirkt sich das auch auf die Nutzbarkeit aus.
Aus einer Eingabeaufforderung heraus ist diese Exe benutzbar:
C:\Windows\System32\tskill.exe notepad /a
(Notepad wird abgeschossen.)
Führe ich denselben Befehl mit
c#
aus:Process p = new Process();p.StartInfo.FileName = "C:\\Windows\\System32\\tskill.exe";p.StartInfo.Arguments = "notepad /a";p.Start();
So erhalte ich eine Exception: Das System kann die angegebene Datei nicht finden
Mit einem
OpenFileDialog
in c#
ist tskill.exe auch nicht in System32 auffindbar.Bei C:\Windows\System32\explorer.exe ist es übrigens genau umgekehrt.
Es gibt auch noch den Ordner
C:\Windows\SysWOW64 aber in dem ist tskill.exe auf beide Arten nicht zu finden.
tskill.exe habe ich dann noch in diesem Ordner gefunden:
C:\Windows\winsxs\amd64_microsoft-windows-t..es-commandlinetools_31bf3856ad364e35_6.1.7600.16385_none_40a54b0d12b542e8
und dort ist es von
cmd
und c#
auffind- und ausführbar.Ich würde aber echte Dateien (keine Verknüpfungen, Aliase oder sonstig "Virtuelles") eher in System32 erwarten, als in winsxs.
Was hat sich Microsoft dabei gedacht?
Okay, die Frage ziehe ich zurück.
Letztendlich geht es mir nur darum, wie und womit ich einer Datei ansehen kann, ob sie wirklich vorhanden ist?
Gruß Frank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 273873
Url: https://administrator.de/forum/exe-dateien-in-system32-vorhanden-oder-nicht-273873.html
Ausgedruckt am: 22.12.2024 um 09:12 Uhr
8 Kommentare
Neuester Kommentar
Stichwort 32/64Bit Anwendungen und Umleitung der Ordner ...
Gruß jodel32
- Unterschiedliche Dateien bzw. Ordner im Firefox-Upload-Fenster und Windows-Dateiexplorer
- http://www.samlogic.net/articles/32-64-bit-windows-folder-x86-syswow64. ...
Gruß jodel32
Hi,
ich nehme an, das hat was mit der Datei- und Registrierungsvirtualisierung zu tun.
File System Redirector
E.
ich nehme an, das hat was mit der Datei- und Registrierungsvirtualisierung zu tun.
File System Redirector
E.
Hallo Frank.
Grüße
rubberman
ob und wie man mit c#-32-Bit die 64-Bit-cmd.exe als externen Prozess starten kann
@emeriks hat dir genau den richtigen Link geliefert und auch bei @114757 gibt es im verlinkten Beitrag auf SamLogic unten den richtigen Hinweis. Wenn du im WOW64 Modus auf das Dateisystem im system32 Verzeichnis zugreifen willst, musst du auf das virtuelle Verzeichnis "%systemroot%\sysnative" zurückgreifen.Grüße
rubberman
Ein einfaches, vorhergehendes Prüfen mit
sollte es reißen ...
System.IO.File.Exists
E.
System.IO.File.Exists("C:\\Windows\\sysnative\\tskill.exe"
System.IO.File.Exists
E.
Hallo Frank.
Wenn man das Prinzip einmal durchschaut hat, ist es ganz einfach ...
OK, noch mal in aller Kürze:
Grüße
rubberman
Man darf es nur nicht übertreiben
Naja, du startest die 64Bit Version der cmd.exe. Die läuft dann also nicht im WOW64 Modus. Somit existiert das sysnative Verzeichnis für diesen Prozess nicht.Wenn man das Prinzip einmal durchschaut hat, ist es ganz einfach ...
OK, noch mal in aller Kürze:
- Ein Prozess läuft (nur) dann im WOW64 Modus, wenn er ein 32-Bit Prozess auf einem 64-Bit Windowssystem ist.
- Läuft ein Prozess im WOW64 Modus, dann werden Pfade, die auf System32 (oder Unterverzeichnisse) zeigen, automatisch in das SysWOW64 Verzeichnis (oder Unterverzeichnisse) umgeleitet, was in der Regel Sinn macht.
- Will man aus einem WOW64 Prozess auf das reale System32 Verzeichnis im Dateisystem zugreifen, muss man auf das virtuelle Sysnative Verzeichnis zurückgreifen.
- Nur WOW64 Prozesse können auf das Sysnative Verzeichnis zugreifen. Für 64-Bit Prozesse auf einem 64-Bit Windowssystem (oder auch 32-Bit Prozesse auf einem 32-Bit Windowssystem) gibt es die Dateisystem-Umleitung nicht und System32 zeigt auf das reale System32 Verzeichnis im Dateisystem.
- Zur Prüfung, ob ein Prozess im WOW64 Modus läuft, kannst du die Existenz des virtuellen Sysnative Verzeichnisses prüfen oder man nutzt die extra zu diesem Zweck entwickelte
IsWow64Process
WinAPI Funktion der kernel32.dll.
Grüße
rubberman