none
Programmabsturz (fehlerhaftes Modul KERNEL32.dll) bei MFC-Programm mit mixed assemblies RRS feed

  • Frage

  • Hallo,

     

    habe das Problem, dass mein Programm (C++-MFC-Hauptprogramm + C#-.NET-Bibliotheken) bei bestimmten Aktionen immer abstürzt (ohne Meldung). Bei dem Programm handelt es sich um eine MFC-Applikation die .NET-Assemblies benutzt. Der Aufruf von .NET-Forms(Dialogen) vom MFC-Code aus funktioniert hierbei problemlos. Der Absturz erfolgt aber regelmäßig beim Versuch ein in einem MFC-MDI-Fenster gehostetes Forms-Control aufzurufen. Die MDI-Host-Klassen sind dabei (wie in den Beispielen in der MSDN) von CWinFormsView abgeleitet.

    Im Ereignisprotokoll kann man dann folgende Meldung finden:

     

    Fehlerhafte Anwendung ipc-nt.exe, Version 6.0.125.0, Zeitstempel 0x4b9df713, fehlerhaftes Modul KERNEL32.dll, Version 6.0.6002.18005, Zeitstempel 0x49e037dd, Ausnahmecode 0xe0434f4d, Fehleroffset 0x0003fbae, Prozess-ID 0xb70, Anwendungsstartzeit 01cac444d0d37ca7.

     

    Komischerweise stürzt das Programm nicht auf allen Rechnern (Konfigurationen) ab, sondern anscheinend nur auf denen auf denen Visual Studio 2008 nicht installiert ist???

     

    Absturz unter:

    -          Windows Server 2003 R2 Standard Edition SP2 (x86)      à Kein Visual Studio 2008 installiert

    -          Windows Vista Ultimate SP2 (x86)                                   à Kein Visual Studio 2008 installiert

     

    Funktioniert (und entwickelt) unter:

    -          Windows Server 2008 Enterprise SP2 (x64)                           à Visual Studio 2008 mit SP1 installiert

    -          Windows 7 Professional (x64)                                          à Visual Studio 2008 mit SP1 installiert

     

    Funktioniert auch unter:

    -          Windows Server 2003 Small Business SP2 (x86)              à Visual Studio (ohne SP1) installiert

     

    Zielframework des Programms ist 3.5 und auf allen Rechnern ist auch .NET-Framework 3.5 SP1 installiert. Zudem sind auf allen Rechnern die Redistributables von Visual C++ 2008 Redistributables (x86 9.0.30729) installiert.

     
    Ist wirklich die (fehlende) Visual Studio Installation die Ursache, und was muss ich tun damit es auch ohne funktioniert?

    Speedy

     

    Dienstag, 16. März 2010 08:46

Antworten

  • Hallo,

    habe inzwischen des Rätsels Lösung gefunden, dem Remote-Debugger sei Dank.

    Ursache ist eine FileNotFoundException die geworfen wird, weil das Assembly MFCMIFC80 nicht gefunden wurde. Wieso das Programm allerdings dieses Assembly überhaupt benötigt und wieso es dann nicht über die Redistributables automatisch verteilt wird ist mir ein Rätsel.

    Jedenfall reicht es aus die entsprechende Datei (MFCMIFC80 .DLL) einfach zum Programm in denselben Ordner zu stellen und alles funktioniert.

    Speedy
    • Als Antwort markiert Speedy G. _ Mittwoch, 17. März 2010 08:49
    Mittwoch, 17. März 2010 08:48

Alle Antworten

  • Hallo Speedy!

    > Zielframework des Programms ist 3.5 und auf allen Rechnern ist auch
    > .NET-Framework 3.5 SP1 installiert. Zudem sind auf allen Rechnern die
    > Redistributables von Visual C++ 2008 Redistributables (x86 9.0.30729)
    > installiert.

    Ich würde auf jeden Fall das aktuelle Redistributable installieren:
    http://blog.kalmbach-software.de/de/2009/12/17/ccli-programme-auf-einem-anderen-rechner-ausfuhren/

    Und meine Empfehlung: Lass es doch mal unter WinDbg/Adplus laufen, dann
    siehst Du zumindest den Callstack:
    http://blogs.msdn.com/johan/archive/2007/01/11/how-to-install-windbg-and-get-your-first-memory-dump.aspx

    Jochen Kalmbach (MVP VC++)
    Dienstag, 16. März 2010 09:05
  • D.h. sowohl CRT und MFC sind als Runtime aus dem SP1 installiert?
    Was steht in den Manifesten für die EXE? Ziehen die auch die SP1 Version?

    Wenn der Crash im nativen Teil liegt könnte ein Crash-Dump helfen.
    Ansonsten könntest Du auch versuchen mit Remote-Debugging dem Problem auf die Spur zu kommen.
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 16. März 2010 09:07
    Moderator
  • Hallo Martin,

    könnte sein dass dein Hinweis auf die Manifestdatei auf die richtige Spur führt. Habe mir mal die Datei Programm.exe.intermediate.manifest angeschaut und dort steht die Version 9.0.21022.8 und sollte das nicht eigentlich 9.0.30729.1 für den SP1 sein?

    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC90.MFC' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC90.ATL' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
    </assembly>
    

    Wenn ja, frage ich mich wo der 'falsche' Verweis herkommt. Zusätzlich haben wir eine 'eigene' Manifestdatei angegeben, die nur folgende Einträge enthält:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
    version="0.0.0.0" 
    processorArchitecture="X86" 
    name="xyz GmbH.IpcNt.Ipc-Nt" 
    type="win32" 
    /> 
    <description>IPC-Leitstand</description> 
    <dependency> 
    <dependentAssembly> 
    <assemblyIdentity 
    type="win32" 
    name="Microsoft.Windows.Common-Controls" 
    version="6.0.0.0" 
    processorArchitecture="X86" 
    publicKeyToken="6595b64144ccf1df" 
    language="*" 
    /> 
    </dependentAssembly> 
    </dependency> 
    </assembly>  
    Kann der Fehler durch die Kombination der 2 Manifestdateien kommen?

    Speedy
    Dienstag, 16. März 2010 13:09
  • Hallo,

    habe inzwischen des Rätsels Lösung gefunden, dem Remote-Debugger sei Dank.

    Ursache ist eine FileNotFoundException die geworfen wird, weil das Assembly MFCMIFC80 nicht gefunden wurde. Wieso das Programm allerdings dieses Assembly überhaupt benötigt und wieso es dann nicht über die Redistributables automatisch verteilt wird ist mir ein Rätsel.

    Jedenfall reicht es aus die entsprechende Datei (MFCMIFC80 .DLL) einfach zum Programm in denselben Ordner zu stellen und alles funktioniert.

    Speedy
    • Als Antwort markiert Speedy G. _ Mittwoch, 17. März 2010 08:49
    Mittwoch, 17. März 2010 08:48
  • MFCMIFC80 hört sich aber schwer nach VS-2005 an.

    Siehe auch Dieser Theead bzgl. Installation.
    http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/de01044a-5e3b-4145-becf-0a66014c8417
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 17. März 2010 11:02
    Moderator