Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ShellExecuteEx funktioniert manchmal nicht (https://www.delphipraxis.net/153615-shellexecuteex-funktioniert-manchmal-nicht.html)

Shark99 10. Aug 2010 10:52

ShellExecuteEx funktioniert manchmal nicht
 
Ich benutzte ShellExecuteEx aus der Jedi Lib um meine eigene Anwendung neuzustarten inkl eines UAC Dialogs mit nachfolgenden Admin rechten, d.h. der erste Start ist ohne Admin rechte und erst bei Bedarf werden diese angefordert.

Die Beschreibung habe ich von hier:

http://blog.delphi-jedi.net/2008/03/...ta-with-jwscl/
Delphi-Quellcode:
         JwShellExecute(Handle,
             ParamStr(0), f+';'+p, '', SW_NORMAL,
             [sefNoUi, sefFixDirWithRunAs,
              sefIgnoreElevationIfNotAvailable, sefNoClosehProcess]);
Unter Windows Vista SP3 32 Bit: läuft ohne Probleme

Unter Windows 7 64 Bit aus der Delphi 7 IDE Heraus: läuft ohne Probleme

Unter Windows 7 64 Bit vom Explorer gestartet kommt diese Exception:

EJwsclWinCallFailedException
GetLastError: 127
GetLastErrorMsg: The specified procedure could not be found

Erklärung aus dem Jedi Code:

EJwsclWinCallFailedException: will be raised if a call to ShellExecuteEx failed
EJwsclUnsupportedWindowsVersionException will be raised if the flag
sefIgnoreElevationIfNotAvailable is set and UAC is not available

---

UAC ist auf allen Systemen an.

Suche nach einer Lösung seit zwei Stunden und bin nun am verzweifeln. In allen drei Fällen hat die App beim ersten start KEINE Admin Rechte (ausgiebig getestet). Wieso funktioniert es unter Vista und unter Windows 7 aus der IDE heraus, aber nicht unter Windows 7 ohne die IDE?

Dezipaitor 10. Aug 2010 12:22

AW: ShellExecuteEx funktioniert manchmal nicht
 
Hi,

die Fehlermeldung
Zitat:

EJwsclWinCallFailedException
GetLastError: 127
GetLastErrorMsg: The specified procedure could not be found
sieht gekürzt aus.
JWSCL Exceptions sollten mehr enthalten. Kannst du das hier posten?

Shark99 10. Aug 2010 12:29

AW: ShellExecuteEx funktioniert manchmal nicht
 
Sonst ist da leider nichts brauchbares da, Codeline ist 0 etc.

Meine Vermutung ist nun dass Delphi7 in einem bestimmten Kompatibilitätsmodus unter Window 7 läuft und bekommt mehr Rechte als andere Anwendung, deshalb läuft es in der IDE.

Dezipaitor 10. Aug 2010 12:41

AW: ShellExecuteEx funktioniert manchmal nicht
 
Zitat:

Zitat von Shark99 (Beitrag 1040791)
Sonst ist da leider nichts brauchbares da, Codeline ist 0 etc.

Achso, alles klar. Aus deiner langjährigen Erfahrung kannst du das natürlich beurteilen :)

Shark99, gib doch alle verfügbaren Informationen zu dem Problem. Woher willst du denn wissen, dass jemand anderes mit den Informationen nichts anfangen kann? Indem du nur Ausschnitte herausgibst, verschenkst du meine und deine Zeit und Aufwand.

Dezipaitor 10. Aug 2010 13:08

AW: ShellExecuteEx funktioniert manchmal nicht
 
Ich hab das nochmal bei mir implementiert und habe unter Win7 64bit keinen Fehler entdeckt (egal ob mit oder ohne IDE).

Im Kompatibilitätsmodus sollte sich das Programm einfach so starten, da dann auch Adminrechte vorliegen.

EDIT:
Wie hast du denn die JEDI API installiert?

Shark99 10. Aug 2010 15:57

AW: ShellExecuteEx funktioniert manchmal nicht
 
Habe das Problem gefunden. Es lag an Wow64DisableWow64FsRedirection().

Dezipaitor 10. Aug 2010 17:09

AW: ShellExecuteEx funktioniert manchmal nicht
 
Von dir vorher aufgerufen?

Ah, das kann natürlich sein. JEDI API sucht die DLL beim ersten Aufruf der Funktion auf der Platte mit LoadLibrary. Da kann es passiert sein, dass eine ander ShellAPI32.dll geladen wird, wo ShellExecuteW nicht gefunden werden kann. D.h. bei einem zweiten Aufruf, diesmal mit Wow64DisableWow64FsRedirection, sollte es funkzen.

Shark99 11. Aug 2010 11:21

AW: ShellExecuteEx funktioniert manchmal nicht
 
Ja, hatte es zuvor im Code aufgerufen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.

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