Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows 7 64Bit Redirection (https://www.delphipraxis.net/155861-windows-7-64bit-redirection.html)

Assarbad 11. Nov 2010 20:23

AW: Windows 7 64Bit Redirection
 
Kleiner Nachtrag.

Du solltest meines Erachtens nach nicht extra testen ob du auf x64 läufst und vor allem nicht via Registry sondern via MSDN-Library durchsuchenGetNativeSystemInfo. Wie gesagt, testen ist aber m.E.n. unnötig, weil auf einem 32bit-System die Funktionen nicht von kernel32.dll exportiert werden ;)

Dezipaitor 12. Nov 2010 09:52

AW: Windows 7 64Bit Redirection
 
Also dieser Code startet bei mir osk 64bit. Ohne Wow64DisableWow64FsRedirection wollte osk garnicht erst starten. Die 32Bit funkz wohl nicht unter 64bit (oder will nicht).

Delphi-Quellcode:
uses
  JwaWindows,
  SysUtils;

function GetNativeWindowsDirectory : String;
var
  P : array[0..MAX_PATH] of Char;
begin
  SHGetFolderPath(0, CSIDL_SYSTEM, 0, SHGFP_TYPE_DEFAULT, @P);

  result := P;
end;

var
  oldValue : Pointer;
  Path : String;
begin
  Path := GetNativeWindowsDirectory + '\osk.exe';

  if not Wow64DisableWow64FsRedirection(oldValue) then
    RaiseLastOSError;

  ShellExecuteW(0, 'open', PChar(Path), '', '', SW_SHOWNORMAL);

  Wow64RevertWow64FsRedirection(oldValue);
end.
ShowMessage funktioniert nur dann, wenn es mindestens einmal vor Wow64DisableWow64FsRedirection aufgerufen wurde. Sonst sind nicht alle DLLs geladen und es wird versucht eine 64bit DLL in einen 32bit Prozess zu laden. Zumindest ich bekomme eine generische Exception C0FB007E, was wohl vom Delphi delay loader Mechanismus stammt. $7E = 126d ist übrigens der Win32 Code für Modul nicht gefunden.

amigage 13. Nov 2010 15:55

AW: Windows 7 64Bit Redirection
 
Ich danke Euch für die rege Teilnahme an meinem Problem :roll:

Leider wird das irgendwie nichts bei mir. Showmessage habe ich durch Memo.Lines.Add ersetzt und jetzt werden auch die Ausgaben gemacht.
  1. is64Bit : true
  2. Abschaltung starten
  3. disabled : true
  4. start von C:\Windows\system32\osk.exe
  5. isStarted : 5 // Rückgabe von Shellexecute
  6. Abschaltung wieder einschalten
  7. enabled : true


Aber osk.exe startet immer noch nicht. Also habe ich mir den Rückgabewert von Shellexecute ausgeben lassen. Der sollte über 32 sein, aber es wird eine 5 ausgegeben. Und die besagt "Der Zugriff wurde auf die angegebene Datei verweigert." Ich weiß nicht warum... Kann mir das jemand erklären?

Danke.

Bummi 13. Nov 2010 18:11

AW: Windows 7 64Bit Redirection
 
auch wenn Du die Anwendung als Administrator startest?

Assarbad 13. Nov 2010 18:19

AW: Windows 7 64Bit Redirection
 
Zusammen mit Thomas' Vorschlag würde ich noch vorschlagen, daß du Process Monitor von (Sysinternals/MS Technet) mal ne Chance gibst. Wenn du dann so filterst, daß nur dein Programm und osk.exe angezeigt werden und es auf Dateiaktionen beschränkst, kannste den gefilterten Dump (PML!) hier mal anhängen und dann können wir alle miträtseln ;)

amigage 14. Nov 2010 09:02

AW: Windows 7 64Bit Redirection
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe einmal das Log vom Process Monitor angehangen. Ich hoffe, ihr könnt erkennen, wo das Problem ist. Das 64 Bit System ist übrigens in Englisch, was aber nicht das Problem sein sollte, oder?

@Bummi:
Dasselbe passiert auch, wenn ich das Programm als Admin ausführe.

Ich wünsche Euch allen einen schönen Sonntag.

Dezipaitor 14. Nov 2010 11:05

AW: Windows 7 64Bit Redirection
 
Hast du mal meinen Code ausprobiert oder machst du eine neue EXE zum testen, weil die alte Exe funktioniert bei mir nicht.

Assarbad 14. Nov 2010 14:57

AW: Windows 7 64Bit Redirection
 
Zitat:

Zitat von amigage (Beitrag 1061378)
So, ich habe einmal das Log vom Process Monitor angehangen. Ich hoffe, ihr könnt erkennen, wo das Problem ist.

Ich sehe ehrlich gesagt kein Problem. Laut dem Report sieht es so aus als ob osk.exe (und zwar die x64-Variante, denn es gibt ja zwei auf dem Win7 x64) erfolgreich gestartet wird und dann auch gleich wieder beendet wird. Wenn du also einen Fehler bekommst, sollte der innerhalb von osk.exe passieren ...

Zitat:

Zitat von amigage (Beitrag 1061378)
Das 64 Bit System ist übrigens in Englisch, was aber nicht das Problem sein sollte, oder?

Nein.

Zitat:

Zitat von amigage (Beitrag 1061378)
Ich wünsche Euch allen einen schönen Sonntag.

Dir auch.

Dezipaitor 14. Nov 2010 20:16

AW: Windows 7 64Bit Redirection
 
Wie gesagt, sein Code funktioniert bei mir nicht, meiner jedoch schon.
Vielleicht mal testen?
Solange das nicht geschehen ist, werde ich auch nicht mehr weiter raten.

Assarbad 14. Nov 2010 20:18

AW: Windows 7 64Bit Redirection
 
Zitat:

Zitat von Dezipaitor (Beitrag 1061491)
Wie gesagt, sein Code funktioniert bei mir nicht, meiner jedoch schon.

Ich hatte alle ShowMessage-Aufrufe auskommentiert. Dann ging auch sein Code.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz