(18.12.2014 16:40 )Hubert R. schrieb: Hallo zusammen,
vielleicht kann mir wer von euch das beantworten. Ich habe ein Projekt von nach umgestellt.
Nachdem habe ich festgestellt das im Projekt Explorer unter Anhängigkeiten zwei neue DLL eingebunden wurden.
Am Quellcode wurden keine Änderungen durchgeführt.
Es ist Advapi32.dll und kernel32.dll.
Für was oder von wem werden diese im Projekt bzw. unter benötigt?
Zudem fand ich diese Links ?:
http://www.file.net/prozess/advapi32.dll.html
http://www.heise.de/tp/artikel/5/5274/1.html
Die Links, vor allem der zweite, sind vollkommen irrelevant (schau mal das Datum an! 1999).
Diese zwei DLLs sind standard DLLs von Windows und sollten NIE mit einer Application distributiert werden.
1) ist das illegal weil ein Bestandteil von Windows
2) ist es in allen Fallen eine Katastrophe! LabVIEW wird dann die private Kopie laden die in den meisten Fällen völlig inkompatibel mit dem Rest der Windwos Installation ist, aber selbst wenn die Versionen stimmen, kommt es zu katastrophalen Fehlern, weil die zwei seperaten DLLs die gleichen Systemresourcen zu verwalten versuchen und sich dabei hässlich in die Quere kommen.
Der Grund warum diese DLLs in Deine Abhängigkeiten gekommen sind ist nicht ganz einfach zu eruieren (wahrscheinlich hat es mit Pfadänderungen im Zusammenhang mit 32 Bit Windows zu 64 Bit Windows zu tun) aber relative einfach zu beheben.
- Im Projekt (das Du ja offensichtlich verwendest) suche unter den Abhängigkeiten (Dependencies) diese zwei DLLs.
- Lass Dir mit der rechten Maustaste anzeigen wo die alles benützt werden.
- Öffne diese VIs und suche die Call Library Nodes.
- Öffne die Konfiguration der Call Library Nodes und schaue ob dort der Library Path eine Referenz zu diesen zwei DLLs enthält.
- Wenn dem so ist, ändere den Pfad dahingehend, dass nur der DLL Name ohne irgendwelchen Pfad dort steht.
- Schliesse den Konfigurationsdialog und speichere das VI ab.
- Wenn Du den Konfigurationsdialog wieder öffnest wirst Du zwar wiederum den ganzen Pfad zu der DLL im Systemdirecotry sehen, aber LabVIEW hat intern nur den DLL Namen gespeichert, so dass es auch auf anderen System wo ein anderer Systempfad gilt noch gut geht. Aber wenn Du nun an diesem Pfad etwas editierst ohne ihn wieder auf nur DLL Namen zu setzen speichert LabVIEW wieder den ganzen Pfad und das Problem kehrt zurück.
Der Hintergrund ist der, dass LabVIEW Library Path Namen die nur den Library Namen enthalten als System Libraries behandelt. Diese müssen an einer der Standardorten liegen wo Windows nach DLLs sucht. Aber LabVIEW kopiert diese DLLs nicht in einen Application Build. Wenn der complete Pfad angegeben wird, selbst wenn der im Systemdirectory liegt, behandelt LabVIEW diese Abhängigkeit als applikationsprivat und fügt Sie in den Applikation Build mit ein.