Hallo allerseits,
ich habe grade eben eine merkwürdige Entdeckung gemacht. Es gibt ja unter Windows (8 und neuer) die Datei "SlideToShutDown.exe" in system32. Zum Spaß wollte ich diese Datei mal von einem selbstgeschriebenen Programm aufrufen, musste jedoch feststellen, dass die Datei durch die Prüfung von FileExists nicht existiert.
Und nun wird es noch viel Merkwüriger: Wenn ich eine cmd von meinem Programm starten lasse (mit ShellExecute) und "dir /a *slide*" in system32 eingebe, wird die Datei ebenfalls nicht gefunden. Wenn ich die cmd aber über den Ausführen-Dialog starte und das gleiche mache, wird die Datei gefunden (über den Explroer wird sie auch gefunden). Ich füge mal ein Screenshot der beiden cmds an (oben ist die cmd, die von meinem Programm aufgerufen wurde. Unten die über den Ausführen-Dialog).
Ich habe schon über den Process Explorer herausgefunden, dass es (wie ich vermutet habe) ein Immersive Prozess (UWP-App) ist. Daran kann es allerdings nicht liegen, da bspw. die exe-Dateien von Edge in "C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe" über meine cmd sichtbar sind.
Dass es virtuelle Verzeichnisse und Dateien in Windows seit Vista gibt ist mir bewusst, allerdings verhalten diese sich anders in der cmd.
Merkwürdiges Verhalten von SlideToShutdown [Windows]
-
- Beiträge: 26
- Registriert: So 4. Dez 2016, 13:35
Re: Merkwürdiges Verhalten von SlideToShutdown [Windows]
Unter einem 64bit Windows werden die Anfragen auf das System32 Verzeichnis auf das SysWOW64 Verzeichnis umgeleitet. Wenn die Datei dort nicht vorhanden ist, kann sie nicht gefunden bzw. ausgeführt werden.
Habe es eben mal getestet. So geht das bei mir auf Windows10 (ein Test, ob die Datei vorhanden ist, bzw. ob es sich um ein 64bit OS handelt, habe ich bei dem Bsp nicht eingebaut):
Bsp. anbei.
Habe es eben mal getestet. So geht das bei mir auf Windows10 (ein Test, ob die Datei vorhanden ist, bzw. ob es sich um ein 64bit OS handelt, habe ich bei dem Bsp nicht eingebaut):
Code: Alles auswählen
uses ..., process;
...
function Disable64FsDirection(var OldValue: LongBool): LongBool; stdcall; external 'kernel32' name 'Wow64DisableWow64FsRedirection';
function Revert64FsDirection(var Value: LongBool): LongBool; stdcall; external 'kernel32' name 'Wow64RevertWow64FsRedirection';
procedure TForm1.Button1Click(Sender: TObject);
var
aProcess: TProcess;
aExecFile: string;
OldDirection: LongBool;
begin
OldDirection := False;
if not Disable64FsDirection(OldDirection) then
raise Exception.Create('Disable of 64 redirection failed');
aExecFile := 'C:\Windows\System32\SlideToShutDown.exe';
aProcess := TProcess.Create(nil);
try
aProcess.Options := [];
aProcess.CurrentDirectory := ExtractFileDir(aExecFile);
aProcess.Executable := ExtractFileName(aExecFile);
aProcess.Execute;
finally
aProcess.Free;
if not Revert64FsDirection(OldDirection) then
raise Exception.Create('Enable previous 64 redirection failed');
end;
end;
Bsp. anbei.
- Dateianhänge
-
- TestShutDown.zip
- (2.21 KiB) 67-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 26
- Registriert: So 4. Dez 2016, 13:35
Re: Merkwürdiges Verhalten von SlideToShutdown [Windows]
Stimmt, da war was. Wenn man mal wieder den Wald vor lauter Bäumen nicht sieht . Vielen Dank.Michl hat geschrieben:Unter einem 64bit Windows werden die Anfragen auf das System32 Verzeichnis auf das SysWOW64 Verzeichnis umgeleitet.