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/)
-   -   ShellExecute im Debug Mode (https://www.delphipraxis.net/185250-shellexecute-im-debug-mode.html)

Amateurprofi 25. Mai 2015 21:17

ShellExecute im Debug Mode
 
Wenn ich im Debug-Mode mit ShellExceute ein Programm starte, dann lande ich immer im CPU-Fenster.
Code:
00570385 8BEC            mov ebp,esp
00570387 83C4F0           add esp,-$10
0057038A B8CC885600       mov eax,$005688cc
0057038F E8BCB3E9FF      call $0040b750
00570394 A1986E5700       mov eax,[$00576e98]
Gut, mit F9 geht's dann weiter, aber es ist doch etwas nervig.

Kann man das irgendwie verhindern?

Delphi-Quellcode:
      S:=ParamStr(0);
      N:=ShellExecute(0,'open',PWideChar(S),Nil,Nil,SW_SHOWNORMAL);
Arbeite ich nicht im Debug-Mode funktioniert es problemlos.

Dalai 25. Mai 2015 21:20

AW: ShellExecute im Debug Mode
 
Was steht denn in der Variable S? Voller Pfad? Parameter? Quotes?

MfG Dalai

Amateurprofi 25. Mai 2015 22:06

AW: ShellExecute im Debug Mode
 
S wird mit ParamStr(0) gefüllt also voller Pfad

Aus der OH:
Anmerkung: ParamStr(0) gibt den Pfad und den Dateinamen des ausgeführten Programms zurück (z.B. C:\TEST\MYPROG.EXE).

himitsu 25. Mai 2015 22:14

AW: ShellExecute im Debug Mode
 
Steht denn nichts dazu im Ereignisprotokoll?

hathor 25. Mai 2015 22:20

AW: ShellExecute im Debug Mode
 
Das geht nur mit Button-Click, nicht in der OnCreate- oder OnShow-Procedure wegen "Kettenreaktion".

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var S : String;
begin
      S:=ParamStr(0);
      ShellExecute(0,'open',PWideChar(S),Nil,Nil,SW_SHOWNORMAL);
end;

Bernhard Geyer 25. Mai 2015 22:31

AW: ShellExecute im Debug Mode
 
Tippe eher darauf das hier eine ShellExtension mit "ungünstiger Compilierung" das Problem ist.

Amateurprofi 25. Mai 2015 22:48

AW: ShellExecute im Debug Mode
 
Da stehen kilometerweise Infos, die ich nicht mal ansatzweise verstehe

So sieht das aus:

Vor ShellExecute vorhandene Meldungen

Thread-Start: Thread-ID: 6760. Prozess VierGewinnt.exe (5836)
Prozessstart: E:\Daten\Delphi XE2\Vier Gewinnt\Win32\Debug\VierGewinnt.exe. Basisadresse: $00400000. Prozess VierGewinnt.exe (5836)
Modul laden: VierGewinnt.exe. Enthält Debug-Infos. Basisadresse: $00400000. Prozess VierGewinnt.exe (5836)
Modul laden: ntdll.dll. Ohne Debug-Infos. Basisadresse: $770C0000. Prozess VierGewinnt.exe (5836)
Modul laden: KERNEL32.dll. Ohne Debug-Infos. Basisadresse: $757C0000. Prozess VierGewinnt.exe (5836)
Modul laden: KERNELBASE.dll. Ohne Debug-Infos. Basisadresse: $76C70000. Prozess VierGewinnt.exe (5836)
Modul laden: OLEAUT32.dll. Ohne Debug-Infos. Basisadresse: $74DA0000. Prozess VierGewinnt.exe (5836)
Modul laden: ole32.dll. Ohne Debug-Infos. Basisadresse: $758D0000. Prozess VierGewinnt.exe (5836)
Modul laden: msvcrt.dll. Ohne Debug-Infos. Basisadresse: $75380000. Prozess VierGewinnt.exe (5836)
Modul laden: GDI32.dll. Ohne Debug-Infos. Basisadresse: $751F0000. Prozess VierGewinnt.exe (5836)
Modul laden: USER32.dll. Ohne Debug-Infos. Basisadresse: $75280000. Prozess VierGewinnt.exe (5836)
Modul laden: ADVAPI32.dll. Ohne Debug-Infos. Basisadresse: $74B60000. Prozess VierGewinnt.exe (5836)
Modul laden: SECHOST.dll. Ohne Debug-Infos. Basisadresse: $74E40000. Prozess VierGewinnt.exe (5836)
Modul laden: RPCRT4.dll. Ohne Debug-Infos. Basisadresse: $74CB0000. Prozess VierGewinnt.exe (5836)
Modul laden: SspiCli.dll. Ohne Debug-Infos. Basisadresse: $74A40000. Prozess VierGewinnt.exe (5836)
Modul laden: CRYPTBASE.dll. Ohne Debug-Infos. Basisadresse: $74A30000. Prozess VierGewinnt.exe (5836)
Modul laden: LPK.dll. Ohne Debug-Infos. Basisadresse: $76A00000. Prozess VierGewinnt.exe (5836)
Modul laden: USP10.dll. Ohne Debug-Infos. Basisadresse: $74AC0000. Prozess VierGewinnt.exe (5836)
Modul laden: MSIMG32.dll. Ohne Debug-Infos. Basisadresse: $6FC50000. Prozess VierGewinnt.exe (5836)
Modul laden: VERSION.dll. Ohne Debug-Infos. Basisadresse: $74960000. Prozess VierGewinnt.exe (5836)
Modul laden: COMCTL32.dll. Ohne Debug-Infos. Basisadresse: $73890000. Prozess VierGewinnt.exe (5836)
Modul laden: SHLWAPI.dll. Ohne Debug-Infos. Basisadresse: $75A40000. Prozess VierGewinnt.exe (5836)
Modul laden: SHELL32.dll. Ohne Debug-Infos. Basisadresse: $75B00000. Prozess VierGewinnt.exe (5836)
Modul laden: COMDLG32.dll. Ohne Debug-Infos. Basisadresse: $74E80000. Prozess VierGewinnt.exe (5836)
Modul laden: WINSPOOL.DRV. Ohne Debug-Infos. Basisadresse: $74900000. Prozess VierGewinnt.exe (5836)
Modul laden: IMM32.dll. Ohne Debug-Infos. Basisadresse: $76750000. Prozess VierGewinnt.exe (5836)
Modul laden: MSCTF.dll. Ohne Debug-Infos. Basisadresse: $75120000. Prozess VierGewinnt.exe (5836)
Modul laden: WTSAPI32.dll. Ohne Debug-Infos. Basisadresse: $73D20000. Prozess VierGewinnt.exe (5836)
Modul laden: WINSTA.dll. Ohne Debug-Infos. Basisadresse: $73C60000. Prozess VierGewinnt.exe (5836)
Thread-Start: Thread-ID: 6852. Prozess VierGewinnt.exe (5836)
Thread-Start: Thread-ID: 6536. Prozess VierGewinnt.exe (5836)
Modul laden: UxTheme.dll. Ohne Debug-Infos. Basisadresse: $6DF80000. Prozess VierGewinnt.exe (5836)
Modul laden: ole32.dll. Ohne Debug-Infos. Basisadresse: $037B0000. Prozess VierGewinnt.exe (5836)
Modul entladen: ole32.dll. Prozess VierGewinnt.exe (5836)
Modul laden: ole32.dll. Ohne Debug-Infos. Basisadresse: $037B0000. Prozess VierGewinnt.exe (5836)
Modul entladen: ole32.dll. Prozess VierGewinnt.exe (5836)
Modul laden: CLBCatQ.DLL. Ohne Debug-Infos. Basisadresse: $76A50000. Prozess VierGewinnt.exe (5836)
Modul laden: dwmapi.dll. Ohne Debug-Infos. Basisadresse: $714B0000. Prozess VierGewinnt.exe (5836)
Thread-Start: Thread-ID: 2136. Prozess VierGewinnt.exe (5836)
Thread-Start: Thread-ID: 4020. Prozess VierGewinnt.exe (5836)

Nach ShellExecute (als Programm im CPU-Fenster hing) hinzugekommen

Modul laden: PROPSYS.dll. Ohne Debug-Infos. Basisadresse: $73720000. Prozess VierGewinnt.exe (5836)
Modul laden: NTMARTA.dll. Ohne Debug-Infos. Basisadresse: $748D0000. Prozess VierGewinnt.exe (5836)
Modul laden: WLDAP32.dll. Ohne Debug-Infos. Basisadresse: $75AA0000. Prozess VierGewinnt.exe (5836)
Modul laden: profapi.dll. Ohne Debug-Infos. Basisadresse: $75AF0000. Prozess VierGewinnt.exe (5836)
Modul laden: urlmon.dll. Ohne Debug-Infos. Basisadresse: $76B20000. Prozess VierGewinnt.exe (5836)
Modul laden: api-ms-win-downlevel-ole32-l1-1-0.dll. Ohne Debug-Infos. Basisadresse: $769F0000. Prozess VierGewinnt.exe (5836)
Modul laden: api-ms-win-downlevel-shlwapi-l1-1-0.dll. Ohne Debug-Infos. Basisadresse: $74E60000. Prozess VierGewinnt.exe (5836)
Modul laden: api-ms-win-downlevel-advapi32-l1-1-0.dll. Ohne Debug-Infos. Basisadresse: $750E0000. Prozess VierGewinnt.exe (5836)
Modul laden: api-ms-win-downlevel-user32-l1-1-0.dll. Ohne Debug-Infos. Basisadresse: $74CA0000. Prozess VierGewinnt.exe (5836)
Modul laden: api-ms-win-downlevel-version-l1-1-0.dll. Ohne Debug-Infos. Basisadresse: $75A30000. Prozess VierGewinnt.exe (5836)
Modul laden: api-ms-win-downlevel-normaliz-l1-1-0.dll. Ohne Debug-Infos. Basisadresse: $76A40000. Prozess VierGewinnt.exe (5836)
Modul laden: Normaliz.dll. Ohne Debug-Infos. Basisadresse: $74E70000. Prozess VierGewinnt.exe (5836)
Modul laden: iertutil.dll. Ohne Debug-Infos. Basisadresse: $767B0000. Prozess VierGewinnt.exe (5836)
Modul laden: WININET.dll. Ohne Debug-Infos. Basisadresse: $75450000. Prozess VierGewinnt.exe (5836)
Modul laden: USERENV.dll. Ohne Debug-Infos. Basisadresse: $75430000. Prozess VierGewinnt.exe (5836)
Modul laden: Secur32.dll. Ohne Debug-Infos. Basisadresse: $73CC0000. Prozess VierGewinnt.exe (5836)
Modul laden: api-ms-win-downlevel-advapi32-l2-1-0.dll. Ohne Debug-Infos. Basisadresse: $6FBC0000. Prozess VierGewinnt.exe (5836)
Modul laden: SETUPAPI.dll. Ohne Debug-Infos. Basisadresse: $74F10000. Prozess VierGewinnt.exe (5836)
Modul laden: CFGMGR32.dll. Ohne Debug-Infos. Basisadresse: $750B0000. Prozess VierGewinnt.exe (5836)
Modul laden: DEVOBJ.dll. Ohne Debug-Infos. Basisadresse: $74AA0000. Prozess VierGewinnt.exe (5836)
Modul laden: apphelp.dll. Ohne Debug-Infos. Basisadresse: $74290000. Prozess VierGewinnt.exe (5836)
Thread-Start: Thread-ID: 4224. Prozess VierGewinnt.exe (5836)
Thread-Start: Thread-ID: 2036. Prozess UNKNOWN (6988)
Prozessstart: Attached/Spawned Process 0x1B4C. Basisadresse: $00400000. Prozess UNKNOWN (6988)
Modul laden: UNKNOWN. Ohne Debug-Infos. Basisadresse: $00400000. Prozess UNKNOWN (6988)
Modul laden: ntdll.dll. Ohne Debug-Infos. Basisadresse: $770C0000. Prozess UNKNOWN (6988)
Modul laden: KERNEL32.dll. Ohne Debug-Infos. Basisadresse: $757C0000. Prozess UNKNOWN (6988)
Modul laden: KERNELBASE.dll. Ohne Debug-Infos. Basisadresse: $76C70000. Prozess UNKNOWN (6988)
Modul laden: OLEAUT32.dll. Ohne Debug-Infos. Basisadresse: $74DA0000. Prozess UNKNOWN (6988)
Modul laden: ole32.dll. Ohne Debug-Infos. Basisadresse: $758D0000. Prozess UNKNOWN (6988)
Modul laden: msvcrt.dll. Ohne Debug-Infos. Basisadresse: $75380000. Prozess UNKNOWN (6988)
Modul laden: GDI32.dll. Ohne Debug-Infos. Basisadresse: $751F0000. Prozess UNKNOWN (6988)
Modul laden: USER32.dll. Ohne Debug-Infos. Basisadresse: $75280000. Prozess UNKNOWN (6988)
Modul laden: ADVAPI32.dll. Ohne Debug-Infos. Basisadresse: $74B60000. Prozess UNKNOWN (6988)
Modul laden: SECHOST.dll. Ohne Debug-Infos. Basisadresse: $74E40000. Prozess UNKNOWN (6988)
Modul laden: RPCRT4.dll. Ohne Debug-Infos. Basisadresse: $74CB0000. Prozess UNKNOWN (6988)
Modul laden: SspiCli.dll. Ohne Debug-Infos. Basisadresse: $74A40000. Prozess UNKNOWN (6988)
Modul laden: CRYPTBASE.dll. Ohne Debug-Infos. Basisadresse: $74A30000. Prozess UNKNOWN (6988)
Modul laden: LPK.dll. Ohne Debug-Infos. Basisadresse: $76A00000. Prozess UNKNOWN (6988)
Modul laden: USP10.dll. Ohne Debug-Infos. Basisadresse: $74AC0000. Prozess UNKNOWN (6988)
Modul laden: MSIMG32.dll. Ohne Debug-Infos. Basisadresse: $6FC50000. Prozess UNKNOWN (6988)
Modul laden: VERSION.dll. Ohne Debug-Infos. Basisadresse: $74960000. Prozess UNKNOWN (6988)
Modul laden: COMCTL32.dll. Ohne Debug-Infos. Basisadresse: $73890000. Prozess UNKNOWN (6988)
Modul laden: SHLWAPI.dll. Ohne Debug-Infos. Basisadresse: $75A40000. Prozess UNKNOWN (6988)
Modul laden: SHELL32.dll. Ohne Debug-Infos. Basisadresse: $75B00000. Prozess UNKNOWN (6988)
Modul laden: COMDLG32.dll. Ohne Debug-Infos. Basisadresse: $74E80000. Prozess UNKNOWN (6988)
Modul laden: WINSPOOL.DRV. Ohne Debug-Infos. Basisadresse: $74900000. Prozess UNKNOWN (6988)
Modul laden: IMM32.dll. Ohne Debug-Infos. Basisadresse: $76750000. Prozess UNKNOWN (6988)
Modul laden: MSCTF.dll. Ohne Debug-Infos. Basisadresse: $75120000. Prozess UNKNOWN (6988)

Nach F9 im Debug-Fenster hinzugekommen

Modul laden: WTSAPI32.dll. Ohne Debug-Infos. Basisadresse: $73D20000. Prozess UNKNOWN (6988)
Modul laden: WINSTA.dll. Ohne Debug-Infos. Basisadresse: $73C60000. Prozess UNKNOWN (6988)
Thread-Start: Thread-ID: 5920. Prozess UNKNOWN (6988)
Thread-Start: Thread-ID: 1708. Prozess UNKNOWN (6988)
Modul laden: UxTheme.dll. Ohne Debug-Infos. Basisadresse: $6DF80000. Prozess UNKNOWN (6988)
Modul laden: ole32.dll. Ohne Debug-Infos. Basisadresse: $036C0000. Prozess UNKNOWN (6988)
Modul entladen: ole32.dll. Prozess UNKNOWN (6988)
Modul laden: dwmapi.dll. Ohne Debug-Infos. Basisadresse: $714B0000. Prozess UNKNOWN (6988)
Thread-Start: Thread-ID: 6492. Prozess VierGewinnt.exe (5836)
Thread-Ende: Thread-ID: 4224. Prozess VierGewinnt.exe (5836)

Nach F9 im CPU-Fenster läuft auch alles ganz normal.

Amateurprofi 25. Mai 2015 22:54

AW: ShellExecute im Debug Mode
 
Zitat:

Zitat von hathor (Beitrag 1302989)
Das geht nur mit Button-Click, nicht in der OnCreate- oder OnShow-Procedure wegen "Kettenreaktion".

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var S : String;
begin
      S:=ParamStr(0);
      ShellExecute(0,'open',PWideChar(S),Nil,Nil,SW_SHOWNORMAL);
end;

Wird nicht im OnCreate oder OnShow aufgerufen, sondern über ein Menu-Item.
Habe es soeben auch mit einem Button versucht, mit genau dem gleichen Resultat.

Amateurprofi 25. Mai 2015 22:57

AW: ShellExecute im Debug Mode
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1302990)
Tippe eher darauf das hier eine ShellExtension mit "ungünstiger Compilierung" das Problem ist.

Kann man prüfen, ob das der Fall ist?
Und wie kann man das beheben?

Dalai 25. Mai 2015 23:05

AW: ShellExecute im Debug Mode
 
Kannst du das in einem Testprogramm nachvollziehen? Wenn nein, dann sucht man das Problem vermutlich an der falschen Stelle, oder anders gesagt, das ShellExecute ist nicht dafür verantwortlich sondern irgendetwas, was vorher im Code steht.

MfG Dalai

hathor 26. Mai 2015 07:15

AW: ShellExecute im Debug Mode
 
WINDOWS8.1, XE7

Bei mir geht #5 problemlos.

Bernhard Geyer 26. Mai 2015 08:14

AW: ShellExecute im Debug Mode
 
Zitat:

Zitat von Amateurprofi (Beitrag 1302995)
Kann man prüfen, ob das der Fall ist?

Ja. Indem man die ShellExtension deaktiviert

Zitat:

Zitat von Amateurprofi (Beitrag 1302995)
Und wie kann man das beheben?

Ja. Indem man die ShellExtension deaktiviert.
Oder diesen Typ von Extensins in der IDE soweit deaktiviert das die IDE nicht stehen bleibt beim Debuggen.

Amateurprofi 26. Mai 2015 14:09

AW: ShellExecute im Debug Mode
 
Zitat:

Zitat von hathor (Beitrag 1303007)
windows8.1, xe7

bei mir geht #5 problemlos.

xe 2

Amateurprofi 26. Mai 2015 14:51

AW: ShellExecute im Debug Mode
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1303010)
Zitat:

Zitat von Amateurprofi (Beitrag 1302995)
Kann man prüfen, ob das der Fall ist?

Ja. Indem man die ShellExtension deaktiviert

Zitat:

Zitat von Amateurprofi (Beitrag 1302995)
Und wie kann man das beheben?

Ja. Indem man die ShellExtension deaktiviert.
Oder diesen Typ von Extensins in der IDE soweit deaktiviert das die IDE nicht stehen bleibt beim Debuggen.

Auch wenn du mich jetzt für blöd hältst:
Wie mache ich das?

Dalai 26. Mai 2015 15:04

AW: ShellExecute im Debug Mode
 
Zitat:

Zitat von Amateurprofi (Beitrag 1303091)
Auch wenn du mich jetzt für blöd hältst:
Wie mache ich das?

Blöd ist nur jemand, der nicht erkennt, dass er nichts weiß und auch nichts dazulernen will. Wer fragt, ist vielleicht unwissend, muss das aber nicht bleiben.

ShellExtensions kann man mit ShellExView bearbeiten. Es bietet sich an, mit den Nicht-Microsoft-Extensions anzufangen, denn die von MS sollten soweit unproblematisch sein.

MfG Dalai

DeddyH 31. Jan 2019 07:24

AW: ShellExecute im Debug Mode
 
Ich weiß, der Thread ist alt, aber mich hat das gerade auch genervt. In meinem Fall ist die Lösung, in Delphi unter "Tools - Optionen - Debugger-Optionen - Embarcadero-Debugger" den Haken bei "Debug in Spawned-Prozessen" rauszunehmen (der ist wohl per Vorgabe aktiv, ich habe ihn zumindest nicht bewusst gesetzt).

Amateurprofi 31. Jan 2019 10:10

AW: ShellExecute im Debug Mode
 
Zitat:

Zitat von DeddyH (Beitrag 1424466)
Ich weiß, der Thread ist alt, aber mich hat das gerade auch genervt. In meinem Fall ist die Lösung, in Delphi unter "Tools - Optionen - Debugger-Optionen - Embarcadero-Debugger" den Haken bei "Debug in Spawned-Prozessen" rauszunehmen (der ist wohl per Vorgabe aktiv, ich habe ihn zumindest nicht bewusst gesetzt).

Herzlichen Dank für diesen Beitrag.
Auch bei mir ist das Problem jetzt erledigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 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