Scelta di un metodo di distribuzione
Aggiornamento: novembre 2007
Nella maggior parte dei casi la distribuzione di applicazioni Visual C++ viene eseguita mediante Windows Installer. Per ulteriori informazioni sui metodi di distribuzione supportati da Visual Studio e su metodi alternativi, vedere Scelta di una strategia di distribuzione e Alternative di distribuzione. La distribuzione ClickOnce per applicazioni native di Visual C++ non è supportata in Visual Studio 2005. È possibile tuttavia distribuire applicazioni Visual C++ tramite ClickOnce dalla riga di comando. Per ulteriori informazioni, vedere Distribuzione ClickOnce per applicazioni Visual C++.
Librerie di Visual C++ come assembly side-by-side
Visual Studio 2005 installa librerie Visual C++ come assembly side-by-sidecondivisi. Per impostazione predefinita, tutte le applicazioni compilate con Visual Studio 2005 vengono compilate come applicazioni isolate con un manifesto incorporato come risorsa o come file esterno che accompagna il binario finale. Per garantire che l'applicazione Visual C++ potrà essere eseguita in un computer senza Visual C++, è possibile che sia necessario ridistribuire gli assembly di Visual C++ con l'applicazione e verificare che siano installati nel computer di destinazione.
Ridistribuzione delle librerie di Visual C++
È possibile ridistribuire le DLL di Visual C++ in tre modi diversi:
Utilizzare i moduli unione di Visual C++ Redistributable per installare una determinata libreria di Visual C++ come assembly side-by-side condiviso nella cache dell'assembly nativo (cartella WinSxS). Questo è il metodo principale consigliato per ridistribuire le librerie di Visual C++. Per accedere a questa cartella è necessario che il programma di installazione venga eseguito da un utente con diritti amministrativi. Per ulteriori informazioni, vedere Ridistribuzione tramite moduli unione. Per un esempio di questa distribuzione, vedere Procedura: distribuire un progetto di installazione e distribuzione.
Utilizzare Visual C++ Redistributable Package (VCRedist_x86.exe, VCRedist_x64.exe, VCRedist_ia64.exe) per installare tutte le librerie di Visual C++ come assembly side-by-side condivisi nella cache dell'assembly nativo (cartella WinSxS). Questo package viene installato da Visual Studio nella cartella %WindowsSdkDir%\Bootstrapper\Packages\ ed è inoltre possibile scaricarlo dall'Area download Microsoft Microsoft Visual C++ 2005 Redistributable Package (x86) all'indirizzo. La ridistribuzione delle librerie di Visual C++ con questo package è consigliata per le applicazioni generate con Visual C++ Express e nei casi in cui è necessaria la distribuzione simultanea di tutte le librerie di Visual C++. Per un esempio di come utilizzare questo package, vedere Procedura: distribuire tramite XCopy.
Installare un determinato assembly di Visual C++ come assembly privato per l'applicazione utilizzando i file inclusi nella directory Programmi\Microsoft Visual Studio 8\VC\Redist. Questo metodo è consigliato per consentire l'installazione di applicazioni da parte di utenti che non dispongono di diritti amministrativi o quando deve essere possibile eseguire un'applicazione da una condivisione. Per un esempio, vedere Procedura: distribuire tramite XCopy.
Nota: |
---|
In Windows Server 2000, l'unico modo consigliato e supportato per eseguire la ridistribuzione delle librerie Visual C++ è l'utilizzo dei moduli unione ridistribuibili. |
Quando si installano le librerie di Visual C++ mediante i moduli unione ridistribuibili, gli assembly vengono distribuiti come assembly side-by-side condivisi nella cache dell'assembly nativo (cartella WinSxS). Per accedere a questa cartella è necessario che il programma di installazione venga eseguito da un utente con diritti amministrativi.
Se un'installazione viene eseguita da un utente che non dispone di diritti amministrativi, la distribuzione degli assembly di Visual C++ ha esito negativo e l'applicazione non verrà eseguita. Inoltre, alcuni prodotti possono consentire l'installazione su base utente, ma i moduli unione installano le librerie in percorsi condivisi e hanno un impatto su tutti gli utenti del sistema. In questi scenari e in altri scenari simili, la tecnica supportata consiste nell'installare gli assembly necessari come assembly side-by-side privati per una determinata applicazione utente.
Con questa tecnica, è sufficiente copiare una cartella con DLL e manifesti per gli assembly dipendenti nella cartella locale dell'applicazione. Durante l'esecuzione dell'applicazione, il caricatore del sistema operativo cerca gli assembly dipendenti per prima cosa nella cartella WinSxS. Se non viene trovato alcun assembly corrispondente, verrà caricato un assembly privato da questa sottodirectory.
L'errata ridistribuzione delle librerie di Visual C++ può causare errori di runtime durante l'esecuzione di un'applicazione che dipende da tali librerie. Per un elenco di errori potenziali e delle relative risoluzioni, vedere Risoluzione dei problemi relativi alle applicazioni isolate C/C++ e agli assembly side-by-side.
Manifesto necessario
La ridistribuzione di applicazioni C/C++ compilate senza un manifesto non è supportata. Le librerie di Visual C++ non possono essere utilizzate da applicazioni C/C++ senza un manifesto che associ l'applicazione a tali librerie. Tutti i binari C/C++ compilati in Visual C++ 2005 devono includere un manifesto con la descrizione delle dipendenze in base alle librerie di Visual C++. Si tratta della configurazione predefinita dei progetti in Visual Studio e del comportamento predefinito del linker che compila il binario finale dal codice oggetto.
In tutti i casi è consigliabile che il manifesto sia interno. Tuttavia, nel caso di un file EXE, il manifesto può essere esterno (questo scenario è supportato ma non è consigliato).
Le applicazioni che prevedono la presenza di DLL dipendenti nella cartella locale dell'applicazione o in una cartella indicata da una variabile di ambiente, possono anche essere vulnerabili alle violazioni della sicurezza. È inoltre più difficile fornire assistenza per tali applicazioni dopo la relativa distribuzione.
Vantaggi del collegamento dinamico rispetto a quello statico
Non è consigliabile ridistribuire applicazioni C/C++ collegate alle librerie di Visual C++ in modo statico. Spesso si ritiene erroneamente che il collegamento statico dell'applicazione alle librerie di Visual C++ consenta di migliorare sensibilmente le prestazioni dell'applicazione stessa. L''impatto sulle prestazioni risultante dal caricamento dinamico delle librerie di Visual C++ è tuttavia insignificante nella quasi totalità dei casi. Inoltre, il collegamento statico non consente la possibilità di assistenza e intervento sull'applicazione e sulle librerie dipendenti da parte dell'autore dell'applicazione o di Microsoft. Si consideri ad esempio un'applicazione collegata in modo statico a una determinata libreria, in esecuzione su un computer client con una nuova versione della libreria. L'applicazione utilizza ancora il codice della versione precedente della libreria e non beneficia pertanto dei miglioramenti apportati alla libreria, ad esempio di quelli relativi alla sicurezza. È consigliabile che gli autori di applicazioni C/C++ riflettano attentamente sulle implicazioni relative all'assistenza prima di decidere di collegare le applicazioni in modo statico a librerie dipendenti e utilizzino il collegamento dinamico appena possibile.
Vedere anche
Concetti
Scelta di una strategia di distribuzione