windows - hvordan man bundle afhængigheder i exe

Indlæg af Hanne Mølgaard Plasc

Problem



Ofte har mine exe'er dll afhængigheder, som jeg pakker med en installatør som nsis eller inno.
Dette giver mening for store programmer, men er overkill for små scripts. [1] [2]


Er der en alternativ måde at pakke afhængigheder på, så brugeren kun kan udføre en enkelt exe og ikke kræve en mappe af dll'er i PATH?






EDIT


Jeg håber på en løsning, der ikke er afhængig af typen af ​​dll'er, og vil også fungere for andre former for afhængigheder.


Her er nogle mulige muligheder:



  • http://www.adontec.com/index.htm?GO=/runtimepacker\_e.htm

  • http://boxedapp.com/

  • http://www.filetransit.com/view.php?id=16640



Er der nogen erfaring med et værktøj som dette? [3] [4] [5]

Bedste reference


Ok, du kunne ikke lide nogen af ​​mine andre to ideer ... så her går ...


Du sender og giver dine kunder en 'stub EXE'. Stubben EXE afhænger ikke af noget andet og indeholder bare en ZIP-fil (eller installationspakke eller lignende) som en ressource i din stub EXE. Zip-filen indlejret i stub EXE indeholder kun det faktiske program EXE og alle dens afhængige DLL'er Når stub EXE kører, pakker den bare ZIP-filen ud til en TEMP-underkatalog og lancerer applikationen EXE.


Du kan optimere det sådan, at hvis appen allerede er installeret i\% TEMP\%, hopper du over udpakningstrinnet og starter kun applikationen EXE, der allerede er til stede.


Personligt ville jeg ikke gå denne vej. Bare giv brugeren et installationsprogram, hvis EXE har afhængigheder. Men du kender dine brugere og kunder bedre end jeg gør.

Andre referencer 1


Du kunne statisk forbinde den eksekverbare.

Andre referencer 2


Et alternativ er at installere DLL'erne i GAC.

Andre referencer 3


Du har ikke nævnt, hvad DLL afhængigheder er. Bare lige op DLLs med en stub lib? Dynamisk indlæst via LoadLibrary? COM? Registrering kræves? Er nogen af ​​dette. NET?


Flere muligheder at overveje.



  1. Sæt alle de nødvendige DLL'er i samme mappe som EXE (så du behøver ikke at mucke med PATH-variablen). Installation er kun en 'kopi *. *' eller kan bare løbe fra en fildel . (YMMV hvis der er .NET-kode - da det har sikkerhedsrestriktioner, når du kører fra en fjernfildeling).

  2. Forbind EXE med C-Runtime i stedet for den dynamiske indstilling (så du behøver ikke at omdirigere MSVCRT på maskiner, der ikke allerede har det installeret).



Jeg har nogle vanvittige ideer, hvis de ovennævnte 2 ting ikke er tilstrækkelige. Lad mig vide.

Andre referencer 4


Tilsyneladende eksisterer der software, der kan konvertere en DLL til en LIB, så du kan linke imod det statisk, men det kan være overkill i dette tilfælde. [6]