Forum: PC-Programmierung windows dll hell


von Vlad T. (vlad_tepesch)


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

von Peter II (Gast)


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.

von Vlad T. (vlad_tepesch)


Lesenswert?

Peter II schrieb:
> Schlimm ist nur wenn er keine dll findet.

genau das passiert ja, obwohl ich genau die dlls, die win auf dem einen 
Rechner verwendet auf den anderen kopiert habe

von Peter II (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> genau das passiert ja, obwohl ich genau die dlls, die win auf dem einen
> Rechner verwendet auf den anderen kopiert habe

hast du alle ewischt?

ms*90*.dll

von g457 (Gast)


Lesenswert?

>c:\windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.616 
1_x-ww_31a54e43\MSVCP90.DLL

Das ist die Runtime (bzw. ein Teil davon) von Visual Studio 
zwotausendirgendwas. Nimm das passende Redistributable (entweder direkt 
von M$ oder aus dem Installationsverzeichnis von Visual Studio) und gut 
iss.

von Vlad T. (vlad_tepesch)


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.

von Peter II (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> und wenn ich die Runtime-dlls aus dem
> studio\VC\redist\x86\Microsoft.VC90.CRT kopiere, dann nimmt er sie ja
> trotzdem nicht.
dann nimm sie mal aus system32

von Arc N. (arc)


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.)

von bat out of hell (Gast)


Lesenswert?


von Peter II (Gast)


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.

von g457 (Gast)


Lesenswert?

Wenn Du die redist wirklich nicht nehmen willst dann besteht noch die 
Möglichkeit, mit Visual Studio einen Installer zu bauen, der dann die 
DLLs mit einpackt.

von Vlad T. (vlad_tepesch)


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.

von Vlad T. (vlad_tepesch)


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.

von Peter II (Gast)


Lesenswert?

blöde frage, kann es sein das du c++.net programierst und nicht c/c++?

von Vlad T. (vlad_tepesch)


Lesenswert?

Peter II schrieb:
> kann es sein das du c++.net programierst und nicht c/c++?
definitv nicht

> blöde frage
stimmt ;)

von Salat (Gast)


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..

von Peter II (Gast)


Lesenswert?

Salat schrieb:
> Weißt du überhaupt, wo Du da reinlangst? g
> https://en.wikipedia.org/wiki/Side-by-side_assembly
hast du dir es mal duchgelesen?

[...]
However, runtime libraries in Visual C++ 2010 no longer use this 
technology;
[...]

von Sebastian L. (Gast)


Lesenswert?

Seh ich auch so.
Ich schreibe ja auch keine Applikation für Win7 und pack dei Dll des 
.Net framework 4.0 dazu nur weil ich das auf nen XP rechner nicht 
installieren will.
Das sind system dll's und die müssen halt installiert sein Punkt.

von bluppdidupp (Gast)


Lesenswert?

Salat schrieb:
> Mach es wie jeder andere auch, installier die passende Redistributable..

...oder alternativ statisch linken sofern möglich ;D

von Wurstbrot (Gast)


Lesenswert?

Ich denke auch, du hast nur zwei Möglichkeiten:

- Alles statisch linken
- Oder Redistributable mitliefern

Das was du bislang versuchst ist eine sehr unsaubere Lösung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.