windows - C # Application Crashes på XP

Indlæg af Hanne Mølgaard Plasc

Problem



I sidste 3 måneder udviklede jeg C # app på Windows 7 i VS2010. Nu er det næsten færdigt, og jeg fandt ud af, at det ikke kunne køre på XP. Det styrter øjeblikkeligt og viser meddelelsen 'Program har fundet problemet og skal lukkes ...'. Standart windows 'send/dont send' fejl siger ikke noget specifikt om problemet.


Jeg kan post kode her, men der er bogstaveligt talt tusindvis af linjer, og jeg ved ikke, hvilken del er vigtig, og som ikke er. Kan nogen fortælle mig 'sædvanlige mistænkte', der forårsager dette problem?


Tak
(btw jeg har ramme 4 på begge mine computere. Mine andre .NET apps fungerer fint.)


[[OPLØSNING]]
Problemet var i LineShape jeg er oprettet i VS10 som en del af GUI. Disse linjer forårsager styrtning, jeg ved ikke hvorfor. Som det viste sig, var det ikke OS-problem, det samme problem var på W7 og Vista. Grundlæggende var hver pc ikke VS instaled :)

Bedste reference


Ved din ansøgning s main håndterer du undtagelser fra ansøgningsdomæner og undtagelser fra applikationstråden i koden og diagnostiserer den som:


AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain\_UnhandledException;

//in windows forms you need also to add these two lines
Application.ThreadException += OnApplication\_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

Andre referencer 1


Jeg vil vædde på, at du bruger P/Invoke eller Mixed mode samlinger (ved hjælp af enten usikre eller indbyggede kode).


Der kunne være en platformforskel (tænk på forskelle mellem 32/64 bitness, men også manglende/ændrede API-opkald).


For at finde ud af de mest sandsynlige steder i din kode, har jeg en lidt usortodoks anbefaling: Kør det gennem MoMa analysatoren (link). [4]


MoMa-analysatoren blev designet til at registrere portabilitetsproblemer, der kan opstå, når der køres applikationer udviklet til/på MS. NET Framework på Mono Framework på tværs af platformen (tilgængelig på Unix, MAC, Windows og endda iOS- og Android-platforme).


Det vil give dig en god rapport om ting, der sandsynligvis vil skabe problemer. Du kan selvfølgelig forsømme de rapporterede emner som 'unimplemented on mono' - fordi det ikke er et problem. Men det vil finde alle sjove anvendelser af P/Invoke og sådanne ting, der kan pege på problemet.

Andre referencer 2


registrer til Appdomain.UnhandledException begivenheden i en statisk dummy initializeregenskab et eller andet sted i din ansøgning, behandle/output begivenheden i din håndterer, før du genoptager den til miljøet. hvis det ikke hjælper det er et andet statisk medlem et eller andet sted, der blev kaldt, før din håndterer blev tilmeldt eller .. 'noget andet er forkert.' [5]


    static bool dummy = RegisterUnhandledExceptionHandler();

    private static bool RegisterUnhandledExceptionHandler()
    {
        AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
        {
            Exception ex = (e.ExceptionObject as Exception);
            // quick dump to file because environment will exit soon
            File.WriteAllText("unhandled.txt", ex.StackTrace);
            throw ex;
        }
        return true;
    }