Seite 1 von 1

Qt OS Programme mit dem VC Patch laufen nicht unter XP

Verfasst: 16. Februar 2006 18:36
von BartSimpson
Hallo ich habe ein grosses Problem. Die Programme die erzeugt werden laufen auf windows 2000 prima nur auf XP Rechner läßt sich das Programm nicht starten:( Egal welches SP drauf ist. Die 3 MS C++ Libs und die Qt Libs liegen in gleichen Verzeichnis wie die exe.
Unter XP bekomme ich immer beim starten den Fehler:
Die Anwebdung konnt nicht richig initialisiert werden(0xc0150002)
Klicken sie auf ok zum beenden. Ich habe es auch ein einem firsch installieren XP versucht:(

Verfasst: 16. Februar 2006 19:35
von michams
Ich habe es auch ein einem firsch installieren XP versucht
Welches Visual C++? Bei 2005 Express muß man das .NET-Framework2 auf dem Zielrechner installiert haben, sonst kommt diese Meldung. Die msvc... dlls mitzuliefern bringt da überhaupt nix. Bei einer kommerziellen Variante sollte man das eigentlich irgendwo einstellen können.

Verfasst: 16. Februar 2006 19:54
von BartSimpson
Und wieso läuft denn das ganze unter win2k wenn ich die Qt Libs + die 3 MS Libs nehme. Auch ohe das ganze .Net geraffe??Da bleibe ich denn doch lieber beim mingw Compiler einfach die mingw.dll + Qt und das wars. Egal ob 2k oder XP. Denn laut den Depends tool aus dem Platform SDK sollten die 3 dll's reichen.:

Verfasst: 16. Februar 2006 21:29
von michams
Hähä, ich kann dir auch nur sagen, was ich bisher so rausgefunden habe und das war eben das.
Allerdings ist es schwer bis unmöglich nachzuvollziehen, was auf einem System bereits drauf ist und welches Programm da irgendwas mitgebracht haben könnte. Wenn ich daran denke, was Nero und Konsorten so einschleppen, da wird einem schlecht. Die einzige Konstante in der Rechnung ist tatsächlich ein frisch installiertes System. Falls du diesem Phänomen wider Erwarten tiefer auf den Grund gehen willst, kannst du ja mal mit 'nem Tool wie FileMon (www.sysinternals.com) nachforschen, was deine exe wo zu finden glaubt und warum es denn nicht da ist.

Dem mingw Statement schließ ich mich an, ich benutze VC lediglich zum Debuggen, weil der Debugger eben das beste ist, was man finden kann. Außerdem ist der Compiler sehr schnell, sodaß man recht flott testen kann. Die finalen Programme werden mit mingw compiliert, wobei es tatsächlich reicht, die drei dlls mitzugeben. Als netter Nebeneffekt bleibt, daß (bei mir zumindest) die Ausführungsgeschindigkeit der mingw Programme deutlich schneller als der VC Programme ist.

Verfasst: 16. Februar 2006 21:47
von BartSimpson
Ich habe es überall extra auf "nacken" Rechnern versucht, um genau das auszuschließne, das irgend ein tool was mitbringt:) Ich werde morgen normal was versuchen. Denn da es Unter win 2k mit den 3 MS Dateien klappt, kann es ja nur an einer Kleinigkeit liegen. Ich hatte schon versucht den Code zu signieren. Aber das hatte auch keine Änderung gebracht:(

Verfasst: 17. Februar 2006 10:07
von BartSimpson
So jetzt bin ich etwas weiter. Wenn ich auch die Xxxx.manifest mitnehme, dann erhalte ich eine Fehlermeldung, das die Anwendung nicht richtig installiert sein. Und in der Ereignisanzeige steht:
Resolve Partial Assembly ist für Microsoft.VC80.CRT fehlgeschlagen. Referenzfehlermeldung: Die referenzierte Assemblierung ist nicht auf dem Computer installiert.
Ich schätze es liegt datan, das XP im gegensatz zu 2k schon eine .net Umgebung hat. Und denkt, das es eine .Net Anwendung ist, was aber nicht stimmt. Jetzte stellt sich nur die Frage, wie man das lösen kann. Denn das es ohen das .net Framework geht, zeigt ja win2k. Hat zufällig jemand eine Idee?

Verfasst: 17. Februar 2006 12:06
von BartSimpson
So nach langem Suchen in der MSDN und im Windows habe ich die Ursache gefunden. Es liegt daran, das ab Win XP ein neues System zum auffinden von Lib's eingefürt worden ist. Was die berüchtigte DLL Hölle beseitigen soll. Und genau das wird den Anwendungen die mit dem Vc 2005 übersetzt werden zum Verhängnis. Das neue System erkennt, das es das "Side-by-Side Assemblies" für die C++ Lib's benötigt, welches jedoch nicht da ist. Xp interissiert sich nicht dafür, das die DLL's im gleichen Verzeichnis liegen wie die exe. Da es nur nach den Side-by-Side Assemblies sucht. Nun gibt es 2 Möglichkeiten das zu beheben. Entweder man weist den Compiler an, Code zu erzugen der sich wie alter Code verhält(keine Ahnung ob das geht) oder man installiert das fehlenden "Side-by-Side Assemblies" nur das darf nur als MSI Packet erfolgen, was ein Problem darstellt, für Apps die nicht installiert werden sollen.:( Also währe machmal die 1. Variante besser. Nur wer hat eine Idee ob und wie man dem VC 2005 Compiler das beibringt????

Verfasst: 17. Februar 2006 21:09
von BartSimpson
So und wieder bin ich etwas weiter gekommen. Wenn man keine Plug-Ins benutzt, dann bekommt man alles prima auch unnter XP zum laufen. Dazu musst man die 3 MS libs in das gleiche Verzeichnis kopieren, wo auch die Anwendung und ihr Manifest steht. Dann legt man eine Datei Names Microsoft.VC80.CRT.manifest an. Die hat folgenden Inhalt:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright © 1981-2001 Microsoft Corporation-->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <noInheritable/>
  <assemblyIdentity
    type="win32"
    name="Microsoft.VC80.CRT"
    version="8.0.50608.0"
    processorArchitecture="x86"
    publicKeyToken="1fc8b3b9a1e18e3b" />
  <file name="msvcr80.dll"/>
  <file name="msvcp80.dll"/>
  <file name="msvcm80.dll"/>
</assembly>
Nur die Plug-Ins laufen nicht unter XP. Egal ob man .net 2.0 installiert hat oder nicht:(