Manifest VC2005 DLL-Version
-
Hallo,
sorry falls ich nen Doppel-Post mache. Hab vorhin (ohne angemeldet zu sein) nen Post geschrieben. Ist aber nach 30 Minuten noch nicht online. Also geh ich mal davon aus, dass das nicht geklappt hat.
Altbekannter Fehler:
Diese Anwendung konnte nicht gestartet werden, weil die Anwendungskonfiguration nicht korrekt ist.
Ich konnte das allerdings mit Manifest-Dateien nicht beheben.
Mir ist aufgefallen, dass die Versionen der installierten DLLs (dotNET 2.0) unterschiedlich zu denen in der Manifest-Datei liegenden sind. Könnte es daran liegen.
<?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.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> </assembly>Auf dem Zielsystem (Windows XP SP1) ist dotNET 2.0 installiert. DLL-Version ist dort aber "8.0.50727.42"?!?
Kann ich in VS2005 einstellen welche Version ich verwenden möchte?
Das Manifest wird doch Standardmäßig erst mal in die exe eingebettet?!?
Wenn der Kunde also dotNET 2.0 installiert hat, dann sollte die exe eigentlich doch gleich laufen? Oder muss ich im VS2005 noch was einstellen. Version war Release und eine "leere" CLR Windows Forms Anwendung.Danke für die Hilfe.
Gruß,
Frank
-
So ich denke ich habs:
Pfad-Ansicht
c:\programme\App\App.exe <- Manfiest in Datei (Standard)
c:\programme\App\Microsoft.VC80.CRT\Microsoft.VC80.CRT.manifest (Inhalt s.u.)
c:\programme\App\Microsoft.VC80.CRT\msvcm80.dll (Version: 8.00.50727.762)
c:\programme\App\Microsoft.VC80.CRT\msvcp80.dll (Version: 8.00.50727.762)
c:\programme\App\Microsoft.VC80.CRT\msvcr80.dll (Version: 8.00.50727.762)Microsoft.VC80.CRT.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <noInheritable/> <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/> <file name="msvcr80.dll"/> <file name="msvcp80.dll"/> <file name="msvcm80.dll"/> </assembly>So funktionierts. Recht umständlich finde ich.
Kann man VC2005 nicht so einstellen, dass .NET 2.0 (Runtime Libs VC 8.0.50727.42) vorausgesetzt wird und die exe (mit eingebettetem Manifest) dann die DLLs aus C:\Windows\WinSxS nimmt?
Gruß,
Frank
-
Dann gib doch im Manifest die 8.0.50727.42 als verlangte CRT Version an.
Dann wird diese auch verwendet!Solange ein publicKeyToken sollten die Dateien auch aus dem SxS verwendet werden.
Es müsste aber auch mit der 42 Version gehen, selbst wenn die 762 verlangt wird...
-
Hallo,
das hatte ich auch versucht. Hat leider nicht funktioniert. Ich hab jetzt mal mit nem Setup die aktuelleren DLLs in WinSxS abgelegt. Das funktioniert. Bin mir aber nicht sicher ob ich das so machen will.
Kann man eigentlich die Fehlermeldung von MS abändern? So das ein Meldung kommt, die auch ein normaler Benutzer vertseht. z.b. "Bitte installieren Sie die aktuelle dotNET-Version." oder "dotNET 2.0 wurde nicht gefunden!".
Gruß,
Frank
-
Das muss funktionieren. Wenn Du den Code mit VS2005 RTM erzeugst wird ja auch die entsprechende CRT verwendet.
Bist Du Dir sicher, dass .NET 2.0 auch diese CRT mit installiert.
Es gibt für die VC Runtimes ein eigenes Merge Modul bzw. VCRedist_x86.exe (siehe Codeproject).
-
Jo, auf dem Rechner ist ne frische Installation Windows XP Professional SP1 drauf. Is ne Virtuelle Maschine, die zum testen genommen wird (war aber bei Kollegen auf normalen Rechner das Selbe). Es ist dotNET 2.0 drauf und funktioniert auch einwandfrei. Wir haben da noch ein anderes VB2005 Programm zum testen drauf das auch dotNET 2.0 braucht und da läufts einwandfrei.
Das Merge Modul hab ich noch nicht getestet und beim VCRedist_x86.exe hat er die Installation des SP2 (WinXP) verlangt und deswegen hab ich das auch noch nicht ausprobiert.
Die Idee das Manifest einfach auf die 42 umzubiegen hatte ich ja wie gesagt auch und ich hab auch geprüft, ob die 42er DLLs auf dem Rechner sind. Und trotzdem kommt die Meldung!?!
Eigentlich soll das ein - "Ich entpacke und starte es" - Programm werden, also ohne Setup. Daher wärs super wenn man irgendwie dem User verständlich mitteilen könnte, das er dotNET 2.0 installieren muss. Kommt die Meldung "Diese Anwendung konnte nicht..." eigentlich vom Programm oder von Windows?