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

vložil Radek Červinka 4. listopadu 2014 23:01

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.

Tagy:

Praxe

Komentáře

5.11.2014 9:10:02 #

JaroB

Něco je o tom i tady viz http://stackoverflow.com/questions/4854534/what-does-an-application-have-to-do-in-order-support-remote-desktop-services/4855902?s=2|0.4722#4855902

JaroB

6.11.2014 11:33:37 #

Zdeněk Vašků

Možná by stálo za to ještě připsat do článku, že před tímto nstavením je dobré si přečíst toto http://msdn.microsoft.com/en-us/library/cc834995%28v=vs.85%29.aspx jak uvádí JaroB a nezapínat to "bezhlavě". Hlavní výhoda tohoto flagu je, že se ušetří systémová režie na simulování prostředí pro každou session.

Co se týče IMAGE_FILE_NET_RUN_FROM_SWAP, tak od 2008R2 jsem se s tím na terminálech už nesetkal, ale čert ví, jestli to není jenom náhoda.

Jinak to padání bych viděl spíš na nějaký bug v systému, případně v kombinaci s aplikací. Server 2008 byl neskutečně zabugovaný. Jeli jsme na něm půl roku hosting terminálů a byla to noční můra.

Zdeněk Vašků

6.11.2014 11:42:38 #

Zdeněk Vašků

Jo a ještě že narozdíl od PEFlags se toto netýká DLL.

Zdeněk Vašků

6.11.2014 13:24:36 #

radekc

IMAGE_FILE_NET_RUN_FROM_SWAP to taky nebylo ve spojitosti s Terminalem, ale tak obecně - při spouštění ze sítě. Chtěl jsem tím jen naznačit, že to není výlučné, tj. to nebo to, ale že se dá nastavit oboje.

radekc

6.11.2014 13:40:11 #

Zdeněk Vašků

Jasně. Na terminálech to byla nezbytnost. U D7 je pak ještě nutné definovat tu konstantu.

Zdeněk Vašků

21.11.2014 11:07:41 #

Michal Tabery

TSAWARE lze přidat i dodatečně do exe pomocí editbin z Visual Studia.

Michal Tabery

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců