windows dll hell

#2512011
Lesenswert?

Hi,
Ich habe hier ein Programm geschrieben, was ich auf beliebige Rechner 
distributieren können möchte.

Ich versuche gerade die nötigen dlls ausfindig zu machen und 
dazuzupacken, aber es will nicht gelingen.

der Dependecy Walker hat abhängigkeiten zur msvcXT90.dll logisch.
(c:\windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.616 
1_x-ww_31a54e43\MSVCP90.DLL)
kopiere ich aber nun genau diese dlls aus dem angezeigten Pfad,
nimmt windows trotzdem nicht vorrangig die lokale dll.
Und auf einem anderen Rechner ohne  VS2009 oder installierte Redists 
will es auch nicht.
die redists will ich nicht extra dazupacken.

statisch linken, ist keine Option, da unter anderem auch die QT-dll 
eingebunden wird, die wiederum die selben msvc-dlls braucht.
Und den Spaß, QT unter Windows in eine statische Lib zu übersetzen will 
ich mir ersparen.

Ich vermute das Problem hat irgend was mit den Manifesten zu tun, davon 
habe ich aber überhaupt keine Ahnung

Hat jemand einen Tip für mich?

Gruß
Vlad
Gast #2512019
Lesenswert?

unter welchem namen hast du die dll abgelegt?

Hatte bis jetzt noch nie probleme bei meinen Anwendungen. Habe aber auch 
noch nie QT verwendet.

Warum ist es denn ein Problem wenn windows eine andere DLL Verwendet, 
wie sie die gleichen name und damit die gleiche Version ist, dann ist 
doch alles ok.

Schlimm ist nur wenn er keine dll findet.
#2512073
Lesenswert?

g457 schrieb:
>>c:\windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.61 
61_x-ww_31a54e43\MSVCP90.DLL
>
> Das ist die Runtime
das weiß ich doch

> Nimm das passende Redistributable (entweder direkt
> von M$ oder aus dem Installationsverzeichnis von Visual Studio) und gut
> iss.
genau das will ich ja vermeiden, dass extra noch etwas installiert 
werden muss. und wenn ich die Runtime-dlls aus dem 
studio\VC\redist\x86\Microsoft.VC90.CRT kopiere, dann nimmt er sie ja 
trotzdem nicht.
#2512157
Lesenswert?

Vlad Tepesch schrieb:
>> Nimm das passende Redistributable (entweder direkt
>> von M$ oder aus dem Installationsverzeichnis von Visual Studio) und gut
>> iss.
> genau das will ich ja vermeiden, dass extra noch etwas installiert
> werden muss. und wenn ich die Runtime-dlls aus dem
> studio\VC\redist\x86\Microsoft.VC90.CRT kopiere, dann nimmt er sie ja
> trotzdem nicht.

Falls ein "Redirection file" (appName.exe.local, Inhalt egal) vorhanden 
ist, wird zuerst im Verzeichnis der Anwendung gesucht, danach in der 
normalen Suchreihenfolge. Ausnahme: Known DLLs zu denen MSVCRT gehört, 
wenn das mal installiert wurde...
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682600(v=vs.85).aspx 
bzw.
http://msdn.microsoft.com/en-us/library/ms682600(VS.85).aspx

Man sollte aber gut überlegen, ob man etwas dagegen macht (kritische 
Fehler in den DLLs, Updates etc.)
Gast #2512338
Lesenswert?

bat out of hell schrieb:
> Es reicht schon länger nicht mehr, die DLLs einfach in den lokalen Pfad
> zu kopieren.
ich habe es nur mal kurz überflogen, dort geht es um diese Manifest 
dateien, diese sind aber meines wissens in 9er version schon nicht mehr 
da.

Ich hatte bis jetzt keine Probleme beim kopieren der dlls, hatte aber 
bis jetzt auch kein ATL oder MFC verwendet.
#2512385
Lesenswert?

hmm ich hab das mir auf dem testsystem (Internet Explorer Application 
Compatibility VPC Image 
http://www.microsoft.com/download/en/details.aspx?id=11575) noch mal 
genau mit dem Dependency Walker angeschaut.

Er scheint die kopierten Dlls zu nehmen - zumindest zeigt er bei diesen 
keinen Fehler an.

Error: The Side-by-Side configuration information for "...\QTCORE4.DLL" 
contains errors. This application has failed to start because the 
application configuration is incorrect. Reinstalling the application may 
fix this problem (14001).
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing 
export function in a delay-load dependent module.

Er meckert über side-by-side configurationsfehler für die qt dll.


die benötigten module für diese dll sehen aber ok aus
nur bei zwei verzögert zu ladenen modulen meckert er:
MSJAVA.DLL
MPR.DLL

das ist aber üblich und kann normalerweise ignoriert werden, die 
abhängigkeiten stecken tief in den windows-eigenen modulen und treten 
bei jedem Programm auf.
#2512456
Lesenswert?

nachdem ich irgendwo die worte .net 3.5 und qt im Zusammenhang hab 
stehen sehen, hab ich testweise mal das Framework installiert
siehe da, der Fehler ist weg.
Obwohl qt keine der .net-dlls einbindet.
Es scheint, dass die .net irgend eine System-DLL updated, womit deren 
Schnittstelle wieder mit der übereinstimmt, die qt erwartet.
komisch, komisch.
Gast #2515228
Lesenswert?

Weißt du überhaupt, wo Du da reinlangst? g

https://en.wikipedia.org/wiki/Side-by-side_assembly

Es ist äußerst ungezogen, DLLs einer Runtime einfach so irgendwohin zu 
klatschen. Was passiert, wenn eine Sicherheitslücke oder sonstige Fehler 
mittels Patch geschlossen werden? Deine App funktioniert evtl. nach 
einem Update dann gar nicht mehr oder schlimmeres.

Mach es wie jeder andere auch, installier die passende Redistributable..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren