Delphi.cz

Český portál Delphi

Externí výjimka c0000005 při spouštění programu přes vzdálenou plochu

Nedávno jsem řešil problém. U jednoho zákazníka, který spouští naše CRMplus přes vzdálenou plochu na (myslím) Windows Serveru 2008 se v určitém případě objevovala zvláštní výjimka.

RPC c0000005

Zajímavé bylo, že to obešlo můj exception handler, takže mi bylo jasné, že to není úplně normální situace.

Podpis problému:
Název události problému: BEX
Název aplikace: CRMplus.exe
Verze aplikace: 4.42.0.0
Časové razítko aplikace: 5437b3ac
Název chybného modulu: RpcRtRemote.dll
Verze chybného modulu: 6.1.7601.17514
Časové razítko chybného modulu: 4ce7992f
Posun výjimky: 00001701
Kód výjimky: c0000005
Data výjimky: 00000008
Verze operačního systému: 6.1.7601.2.1.0.16.7
ID národního prostředí: 1029
Další informace 1: 0a9e
Další informace 2: 0a9e372d3b4ad19135b953a78882e789
Další informace 3: 0a9e
Další informace 4: 0a9e372d3b4ad19135b953a78882e789 

Trochu mne trklo, že je se jednalo o spuštění přes terminal server a v popisu problému se vyskytoval RpcRtRemote.dll a Kód výjimky: c0000005, což je kód externí výjimky. Podobnou chybu jsem už tady řešil s kódem C0000006.

Nebudu to prodlužovat, k předchozímu nastavení

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}

jsem přidal

{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}

což označuje, že vaše binárka je přátelská k Terminal Serveru a on ji nechápe jako "Legacy" - zastaralou. Ekvivalentem pro VS je flag /TSAWARE.

Pokud by to nepomohlo, zkuste se podívat a vypnout Double buffer u komponent - viděl jsem někde kód v Delphi, který detekuje připojení přes Terminal Server a vypne ho.

Datum: 2014-11-04 22:01:00 Tagy: praxe

Praxe