c ++ - Hvor skal du installere SDK DLL'er på et system, så de kan findes af apps, der har brug for dem

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en SDK jeg arbejder på, og den tidligere udvikler har lige droppet DLL'erne i System32 (Tilsyneladende en alvorlig lovovertrædelse: se her)


Så hvis jeg tager dem ud i \ Programmer \\ SDK (eller hvad som helst), hvordan sikrer jeg mig, at alle de apps, der har brug for disse DLL'er, kan få adgang til dem? Og for at afklare, at alle apps, der får adgang til disse, gør tidlige (statiske) bindinger til DLL'erne på kompileringstid, så jeg ikke kan passere den fulde sti til dem eller noget. De skal kunne finde det bare ved kun DLL-filnavnet .


På samme linje, hvad med at inkludere en bestemt version af MSVCR80.dll? De er alle afhængige af dette, men jeg skal sørge for, at de får en bestemt version (den jeg inkluderer).
Nogle ideer?

Bedste reference


En SDK er pr. Definition et udviklingspakke. Det er ikke et installationsprogram ...


Hvad dette betyder er, at de applikationer, der er afhængige af disse samlinger, skal sendes med dem og installere dem i deres lokale \ programfiler. Mapper.


Årsagen til dette er lad os sige, at du beslutter dig for at gøre en brydningsændring ved at fjerne en adgangspunkt for eksempel. Ved at installere dit 'SDK' har det potentiale til at stoppe ældre programmer fra at fungere.


Du kan tage et spil fra Java-håndbogen og opdatere PATH-miljøvariablen. Når et program ringer til en ekstern forsamling, søger den langs denne miljøvariabel, indtil den finder den.


Dette kan selvfølgelig stadig resultere i, at problemet opstår. Så det er bedst at installere SDK'en i programfiler og lade udviklerne af de produkter, der er afhængige af dit værktøjssæt, beslutte, om de vil opdatere deres versioner eller ej.


UPDATE


Da jeg tænker på dette, er det en sidste mulighed at GAC dine forsamlinger. Hvis du gør det, skal du huske på, at de skal være stærkt navngivet og korrekt udformet for ikke at gå på hinanden. Jeg anbefaler ikke denne rute fordi den skjuler de faktiske placeringer af forsamlinger og gør afinstallering lidt vanskeligere end blot at ramme slette på din mappe.

Andre referencer 1


Jeg kan ikke fortælle dig om dine egne DLL'er, men du bør aldrig omfordele Microsoft DLL'er alene.


Du skal altid bruge Microsoft Redistributable Package.


Hvis din ansøgning f.eks. Afhænger af dll fra Dev Studio 2005 SP1, skal du omfordele din applikation med Microsoft Visual Studio 2005 SP1 omfordelbar. Det samme gælder for 2008. MS leverer MSI-baserede installationsprogrammer og fusionsmodul til at omfatte i dit eget produktinstallationsprogram.

Andre referencer 2


Du spørger om 'DLL Hell', noget jeg troede, at hver Windows-udvikler var bekendt med. Ordren med søgning efter DLL'er er:



  • mappen den exex, der kalder dem, blev hentet fra

  • den nuværende mappe

  • forskellige Windows-mapper (som beskrevet i dit tidligere spørgsmål)

  • mapper i PATH-variablen



Da Windows-mapper skal udelukkes, er det tre muligheder.

Andre referencer 3


Du kan sætte din installationssti i søgevejen, som gør det muligt for programmerne at finde dem.


Alternativt kan du installere DLL'erne i samme mappe som det program, der afhænger af dem.


Jeg tror, ​​at den første er bedre fra et SDK-perspektiv - det vil gøre udviklingen lettere. Men jeg tror, ​​at det andet er bedre, når applikationen bliver implementeret til slutbrugere, medmindre du forventer, at der kan være mange forbrugere på et enkelt system, så disk og hukommelsesfodaftryk med at have kopier af DLL'en er uoverkommelige.

Andre referencer 4


Hvis du ikke kan installere dll'erne i samme mappe som exe bruger dem, kan du tilføje din mappe til PATH-miljøvariablen.


Du siger ikke, hvilken version af Windows du bruger, da detaljerne er lidt anderledes end hvad jeg husker.


Du kan også sætte din version af MSVCR80.dll i samme mappe. Du skal dog sikre dig, at din mappe var før systemet en på vejen ellers ville linkeren hente 'standard' en først. Men hvis du vedtog den 'lokale' dlls tilgang, ville du ikke have dette problem som Windows søger først den lokale mappe, og så vil afhente din version af MSVCR80.dll.


Er din version den nyeste eller en tidligere version? Du har måske bedre mulighed for at få din app til at fungere med den version eller senere og derefter lade brugerne opdatere deres maskiner efter behov. Dette illustrerer også hvorfor du aldrig bør rodde med dlls i \ Windows eller \ Windows \ system32 som, som andre har påpeget, kan du bryde andre applikationer ved at ændre versionen af ​​denne dll.