AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datei ausführen unter Windows 64-Bit
Thema durchsuchen
Ansicht
Themen-Optionen

Datei ausführen unter Windows 64-Bit

Ein Thema von Rakshasa · begonnen am 18. Feb 2007 · letzter Beitrag vom 2. Apr 2007
Antwort Antwort
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#1

Re: Datei ausführen unter Windows 64-Bit

  Alt 20. Feb 2007, 11:49
So, jetzt bin ich weniger verwirrt. Habe meine VMWare zum Laufen bekommen und konnte das Ganze auf Win32 (XP, SP2) testen. Dabei trat bei mir der Fehler auf, dass schon die Functionen der kernel32.dll einen Fehler beim Starten des Programms verursacht haben, da diese bei WIn32 fehlen. Auch hat die "0" bei ShellExecute (letzt Parameter) dazu geführt, das RegEdit unsichtbar startet - dies war bei Win64 (Vista) komischerweise nicht der Fall, anscheinend dürften hier Applikatione nicht mehr unsichtbar sein oder so.

Fazit: Habe das Ganze also dynamisch eingebunden und dabei ist folgende Function() herausgekommen; bei mir funktionierte alles unter Win XP32 und Vista 64-Bit tadellos.

Delphi-Quellcode:

uses ShellApi, Windows, Registry;

....

Function FileExec(const sDatei, sParam: String; iShowCmd: Integer = sw_Shownormal): Integer;
type
  TWow64DisableWow64FsRedirection = function(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
  TWow64EnableWow64FsRedirection = function(Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
var
  Wow64FsEnableRedirection: LongBool;

Function IsWin64: Boolean;
begin
  With TRegistry.Create do begin
   RootKey := HKEY_LOCAL_MACHINE;
   Result := KeyExists('\SOFTWARE\Wow6432Node');
   Free;
  end;
end;

var
  hHandle: THandle; // Handle zur DLL
  Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
  Wow64EnableWow64FsRedirection: TWow64EnableWow64FsRedirection;
begin

if isWin64 then begin // Win64

 hHandle := LoadLibrary(PChar('kernel32.dll'));
  if hHandle <> 0 then begin
    @Wow64EnableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64EnableWow64FsRedirection');
    @Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64DisableWow64FsRedirection');

    if (@Wow64EnableWow64FsRedirection <> nil) AND (@Wow64DisableWow64FsRedirection <> nil) then begin // Alles OK? Dann Datei ausführen!
      Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
      Result := ShellExecute(0, nil, PChar(sdatei), Pchar(sParam), nil, iShowCmd);
      Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
    end;

    FreeLibrary(hHandle);
  end;

end else begin // Normales Win32
 Result := ShellExecute(0, nil, PChar(sdatei), Pchar(sParam), nil, iShowCmd);
end;


end;
Der Aufruf erfolgt dann über:

 Fileexec('C:\Windows\regedit.exe', ''); Vielleicht kann's ja jemand anders nochmals testen und ggf. Optimierungsmöglichkeiten posten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz