Toon posts:

[C#] In app gebruikte DLL distributeren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb een applicatie waarin ik een externe DLL gebruik. Die DLL heb ik toegevoegd via 'References' in Visual Studio.net. Als ik de release maak, wordt de DLL keurig naar de release directory gekopieerd. Maar wanneer ik de .exe en de DLL's kopieer naar een andere PC (waar uiteraard het framework op geinstalleerd is), wil de app niet opstarten (ik krijg geen duidelijke error).

De DLL wordt naar de Release directory gekopieerd door VS.net dus het lijkt mij dat de DLL dan gewoon in het app-path hoort te staan. Ik heb ook geprobeerd om 'm in system32 te zetten, zonder resultaat.

Iemand die weet hoe dit in elkaar steekt? b.v.d.! :)

Verwijderd

Waarom denk je dat het aan de DLL ligt?

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Misschien moet je de DLL even registreren met behulp van regsvr32.
Het zou natuurlijk ook kunnen zijn dat de DLL weer andere DLL's nodig heeft, of bijvoorbeeld dingen uit het register wil lezen. Om wat voor DLL gaat het?

My personal website


Verwijderd

Topicstarter
Nou dat denk ik niet.. maar ik kom er niet uit hoe ik de app incl. DLL gedistributeert krijg, dus draaien op een andere PC dan de PC waarop het gemaakt is..:)

[edit]
OZ-Gump: Het gaat om de BASS dll (www.un4seen.com), en daar de .net versie van.

[ Voor 23% gewijzigd door Verwijderd op 23-02-2005 23:16 ]


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
regsvr32.exe filename.dll uitvoeren na de setup.

We are shaping the future


Verwijderd

Topicstarter
Als 't goed is hoeft deze DLL niet geregistreerd te worden, en "regsvr32 BassLib21.Net.dll" geeft dan ook de error dat dat niet kan.

In VB6 heb ik de orginele BASS dll gebruikt (dus niet de .net versie) en dat werkte gewoon. Hoefde niet geregistreerd te worden, en werkte vanuit het app-path.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Dan wordt het nu denk ik echt tijd om de foutmelding die je krijgt precies en volledig hier te vermelden, anders wordt het wel echt enorm ingewikkeld om er iets over te zeggen.

My personal website


Verwijderd

Topicstarter
Ik ben er gedeeltelijk uit.. de DLL BassLib21.Net.dll heeft een andere DLL nodig, namelijk bass.dll. Als ik die erbij zet in de directory, dan werkt het wel. BassLib21.Net.dll is een soort .net port van bass.dll.

Maar het rare is, op de dev. PC, hoeft dat niet, dan werkt het al met alleen die BassLib21.Net.dll.

De logica daarvan ontgaat mij helemaal ..

[ Voor 10% gewijzigd door Verwijderd op 23-02-2005 23:59 ]


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Die bass.dll staat toch ook ergens op je ontwikkelsysteem???

Als hij niet in dezelfde map hoeft te staan op je ontwikkelsysteem, dan zal die DLL waarschijnlijk wel te registreren zijn met regsvr32. Zodra zo'n ding geregistreerd is maakt het niet meer uit waar hij staat.

My personal website


Verwijderd

Topicstarter
Ahh kijk! Dat verklaart een hoop.. ik zat al een beetje in die richting te denken, maar dat is het inderdaad.

Bass.dll stond in de system32 dir. Toen ik 'm daar weghaalde, werkte mijn appje niet meer.

Nu heb ik een beetje een idee hoe het DLL systeem werkt..

Thanks!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Dat is nou wat sommigen "DLL Hell" noemen: de system(32) map wordt volgeplempt met die dingen, een andere applicatie overschrijft een versie en de helft van je applicaties werkt niet meer omdat er een andere versie van het bestand dat je nodig had staat op de plaats waar vroeger het goede bestand stond.

Het plaatsen van DLL's in de applicatiemap zorgt er al grotendeels voor dat een dergelijk probleem zich niet meer voor kan doen.

Wat gebeurt er standaard: een applicatie heeft bestandX nodig en kijkt of het deze in de eigen applicatiemap kan vinden: zo nee dan gaat de applicatie checken of het bestand geregistreerd is binnen het huidige systeem*. Als ook dat niet het geval is, dan gaat de applicatie niet de rest van het systeem doorzoeken, maar begint direct te janken dat hij een bestand mist.
Als het bestand geregistreerd is, zal het bestand opgepakt worden vanaf de locatie waar het volgens de registratie staat en kan de applicatie verder.

* ik weet niet of er eerst lokaal gekeken wordt en dan of het geregistreerd is, of andersom. Maar dat maakt niet heel veel verschil ;)

My personal website


Verwijderd

Topicstarter
Dat wat jij zegt over system32 had ik me ook gerealiseerd inderdaad, dus daarom heb ik de DLL's uit de system32 directory gehaald, en ga ik ze gewoon in het app-path gebruiken :).
Pagina: 1