Installer auf dern Entwicklungrechner funktioniert und auf andere nicht

OP #5081415
Lesenswert?

Hallo zusammen,

ich habe folgende problem:

Einen SW installer, der in auf der Entwicklungsmaschine einwandfrei 
funktioniert
und auf einen andere PC nicht.

Ich bekomme immer einen Fehlermeldung, die besagt dass einen bestimmten 
DLL "not available"
was nicht sein kann.

Für diese SW wurde einen DLL, von einen externen Lieferant angewendet.
Dieses DLL beschreibt die USB Kommunikation zu einer Firmware.
Dieses DLL wurde in C# geschrieben und das war mindesten vor 10 Jahre.
Dieses DLL wurde mit Framwork Version (.NET) 2.0 erstellt.
Den Sourcecode haben wir leider nicht und der externe lieferant 
existiert auch nicht mehr.

--> mit der Visual Studio 2008 war ne einen Problem.
Es hat immer funktioniert.

Da es Visual Studio 2008 bis mitte 2018 supportet wird, müssen wir der 
Sprung auf Visual
Studio 2015 machen was auch getun wurde.

Wir alle notwendige Änderung für die Integration sind durchgeführt.
Nach ach und krach funktioniert aber nur weil es einen extra konfig 
Datei geschrieben werden muss.
Mit denen wird die SW gezwungen mit einen bestimmten Framwork(.NET) 
einen Build zu machen.

Diese Konfig Datei sieht so aus:
1
<?xml version="1.0" encoding="utf-8" ?>
2
<configuration>
3
  <startup useLegacyV2RuntimeActivationPolicy="true">
4
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
5
  </startup>
6
  <runtime>
7
    <NetFx40_LegacySecurityPolicy enabled="true"/>
8
  </runtime>
9
</configuration>

und die muss auch so heissen wie der Application selber.

Mir ist nicht klar warum auf der Entwcklungsrechner funktioniert und auf 
einen anderen nicht, obwohl die notwendige Framwork (4.0) ist schon 
vorhanden.
#5081443
Lesenswert?

Saif K. schrieb:
> Ich bekomme immer einen Fehlermeldung, die besagt dass einen bestimmten
> DLL "not available"
> was nicht sein kann.

Welche DLL genau?

> Dieses DLL beschreibt die USB Kommunikation zu einer Firmware.

Solche DLLs werden gerne mal erst beim 1. Anstecken des Gerätes "scharf" 
- weil erst da der Treiber wirklich im System installiert wird.

Eventuell hat der externe Entwickler nur Deine Anleitung befolgt: 
"Install Software first!". ;-)
OP #5081503
Lesenswert?

Jim M. schrieb:
> Saif K. schrieb:
>> Ich bekomme immer einen Fehlermeldung, die besagt dass einen bestimmten
>> DLL "not available"
>> was nicht sein kann.
>
> Welche DLL genau?

Es handelt sich um eine DLL der hier im Hause entwicklet wurde und genau 
in diesem DLL wurde der externen DLL (C# ".NET 2.0") geladen und dort 
crash weil was anders kann ich mir nicht vorstellen.
Wie gesagt:
Der geliche Installer wurde auf der Entwcklungsrechner installiert und 
dort funktioniert einwandfrei.

>> Dieses DLL beschreibt die USB Kommunikation zu einer Firmware.
>
> Solche DLLs werden gerne mal erst beim 1. Anstecken des Gerätes "scharf"
> - weil erst da der Treiber wirklich im System installiert wird.

Ja das Stimmt und genau das passiert.
Wenn die SW gestartet wird, sucht als erste die USB verbindung bzw. die 
Verbindug zu Firmware wird geprüft ob es vorhanden ist.
OP #5081536
Lesenswert?

Peter II schrieb:
> Saif K. schrieb:
>> Das Programm braucht es das
>
> dann schau im "ProcessMonitor" wo er die dll sucht, Eventuell ist es ja
> keine .net dll sondern eine C++ dll die die passenden Runtime braucht
> und diese auf dem PC nicht installiert ist. Dafür gibt es "depends".

Bei der Installer Projekt ist bei einen Ordner detected dependencies.
Wenn ich diese Ordner ausklappe dann sehe ich folgende:
Microsoft.Net Framwork
HID class.DLL

Wenn ich zwei mal auf der "Microsoft.Net Framwork" dann sehe ich 
folgende seh bitte Anhang.
Angehängte Dateien:
Gast #5081635
Lesenswert?

sicher dass es kein Problem mit unterschiedlichen Pfaden ist?

Das naheliegendste ist doch zu schauen, ob die DLL vom Installer auch 
dort hin kopiert wurde, wo sie erwartet wird - kann ja gut sein dass 
Dein Prog zurecht nicht läuft weil die DLL wirklich fehlt...




was unter XP und 2000 noch "Programme" hieß, ist heute u.a. "Program 
Files" und / oder "Program Files (x86)" - ein alter Installer kann hier 
ausserdem noch Probleme mit Leerzeichen und / oder "(" bekommen
...der Installpfad unter XP hatte beides nicht!


Die ApplicationsFolders des Users sind ja nun auch aufgeteilt - AppData 
- Local - LocalNow - Roaming...

Die Trennung zwischen System, system32 und SysWOW64 sollte man auch 
beachten.
#5081672
Lesenswert?

Saif K. schrieb:
> Für diese SW wurde einen DLL, von einen externen Lieferant angewendet.
> Dieses DLL beschreibt die USB Kommunikation zu einer Firmware.
> Dieses DLL wurde in C# geschrieben und das war mindesten vor 10 Jahre.
> Dieses DLL wurde mit Framwork Version (.NET) 2.0 erstellt.
> Den Sourcecode haben wir leider nicht und der externe lieferant
> existiert auch nicht mehr.

Wenn die DLL nicht extrem umfangreich ist, dann sollte einer der 
Decompiler und etwas Handarbeit reichen
https://www.jetbrains.com/decompiler/
oder
http://www.telerik.com/products/decompiler.aspx
https://github.com/telerik/JustDecompileEngine
https://github.com/telerik/justdecompile-plugins

Abhängigkeiten
http://www.dependencywalker.com/
und/oder
https://github.com/mikehadlow/AsmSpy
#5081680
Lesenswert?

Saif K. schrieb:
> Gero schrieb:
>> sicher dass es kein Problem mit unterschiedlichen Pfaden ist?
> Ja
> Ich bin 100% sicher.
> Gleiche SW aber halt mit Visual Studio 2008 lauft auf jede rechner
> Windows 7 oder Windows 10 (32/64) einwandfrei.
>
>
> Einzige was es gemacht wurde, ist dieses projekt in Visual studio 2015
> zu integrieren mehr nicht.

Das hört sich so an als ob irgendwas eine VC++Runtime referenziert, die 
vom VS mitinstalliert wird...
https://en.wikipedia.org/wiki/Microsoft_Windows_library_files#MSVCRT.DLL.2C_MSVCP.2A.DLL_and_CRTDLL.DLL
Kurzfassung: Bis 14.0 irgendwas mit MSVCR{version}.dll, danach 
VCRUNTIME{version}.dll
Gast #5081696
Lesenswert?

Arc N. schrieb:
> Das hört sich so an als ob irgendwas eine VC++Runtime referenziert, die
> vom VS mitinstalliert wird...
> 
https://en.wikipedia.org/wiki/Microsoft_Windows_library_files#MSVCRT.DLL.2C_MSVCP.2A.DLL_and_CRTDLL.DLL
> Kurzfassung: Bis 14.0 irgendwas mit MSVCR{version}.dll, danach
> VCRUNTIME{version}.dll

dafür gibt es ja wie oben schon geschrieben "depends". Aber wenn 
wirklich alles .net ist, gibt es keine Verbindung zu dieser Runtime.

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