Domanda

Sto sviluppando in un ambiente fortemente limitato, ma anche gli sviluppatori hanno uno stretto controllo.

VCRedist_x86.exe - Ridistribuibile da 4 Mb - non è divertente (quattro ore per il trasferimento). Preferirei semplicemente ridistribuire MFC90.dll, msvcm90.dll, msvcp90.dll e msvcr90.dll - è più simile a 2Mb. Tuttavia, Ridistribuzione dei file Visual C ++ dice:

  

Non è supportato per ridistribuire le applicazioni C / C ++ create senza manifest. Le librerie Visual C ++ non possono essere utilizzate dalle applicazioni C / C ++ senza un manifest che associa l'applicazione a queste librerie. Per ulteriori informazioni, vedere Scelta di un metodo di distribuzione .

Il mio piano originale di copiare le DLL nella directory di lavoro del programma non sembra lavorare in questo nuovo mondo coraggioso di manifest.

La mia prossima ipotesi è di escludere le voci di registro necessarie per popolare i file nella directory WinSxS e popolarli da soli (piuttosto che utilizzare il programma da 4 meg).

[modifica] Il software viene aggiornato frequentemente, quindi le DLL sono fortemente preferite al collegamento statico. [/ modifica]

Come posso distribuire con successo i file necessari ma tenere basso il sovraccarico?

È stato utile?

Soluzione

Usiamo questo: Procedura: distribuire app VC2008 senza installare vcredist_x86.exe

In sostanza

  • Non incorporare un manifest nei file exe.
  • Copia le DLL C ++ e i loro manifest nella directory della tua app.
  • Rimuovi " publicKeyToken " da tutti i manifest (tuoi e di Microsoft).
  • Se necessario, modifica le informazioni sulla versione nei file manifest della tua app in modo che corrispondano ai file manifest di Microsoft (o viceversa)

Altri suggerimenti

[Sono l'attuale manutentore SxS di Microsoft]

Suggerirei fortemente contro di rimuovere l'attributo publicKeyToken dai manifest. La distribuzione privata delle DLL funzionerà perfettamente con questo attributo lasciato intatto. Tuttavia, rimuoverlo impedirà alla tua app di beneficiare degli aggiornamenti di sicurezza nel caso in cui ci fosse una versione più recente del CRT installata centralmente sul computer di destinazione, poiché le dipendenze non corrisponderanno più.

Quindi, per riassumere: è sicuro incorporare il tuo manifest, con il valore predefinito. Copia i file manifest + DLL CRT direttamente nella directory del tuo eseguibile, senza modifiche. Questo è tutto. Win2k + compatibile.

Specifica / MT (Multithreaded) per la "libreria di runtime" impostazione nella pagina delle proprietà del compilatore. Questo si collega staticamente alla libreria di runtime, quindi non è necessario installare il ridistribuibile.

Installali come assembly privati. Vedi qui:

http://msdn.microsoft.com/en-us/library /ms235291.aspx

Nota che se non hai bisogno di tutte le DLL fornite puoi modificare i file manifest per fare riferimento solo a quelli che ti servono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top