Condividi tramite


Scenari per esempi di distribuzione

Aggiornamento: novembre 2007

Si supponga di disporre di MyApplication.exe e MyLibrary.DLL, entrambi creati utilizzando MFC. MyApplication.exe dipende da MyLibray.DLL ed entrambi utilizzano MFC in una DLL condivisa, oltre a essere file binari nativi o misti (/clr). Nel caso più semplice, entrambi vengono generati mediante procedura guidata, senza apportare alcuna modifica alle impostazioni predefinite. Gli esempi riportati in questa sezione descrivono come distribuire l'applicazione su altri computer in cui Visual Studio non è installato. Questa sezione è incentrata sulla distribuzione della versione di rilascio dell'applicazione, ma vengono anche indicate le modifiche necessarie per distribuire la versione di debug di un'applicazione.

Nota:

La ridistribuzione dei programmi Visual C++ di debug non è consentita dal presente Contratto di licenza con l'utente finale. È tuttavia possibile distribuirli temporaneamente per eseguire il debug. Consultare il Contratto di licenza con l'utente finale relativo alle condizioni di licenza software per Visual Studio 2008.

Installazione iniziale

Questo scenario prevede l'utilizzo di tre computer.

Nel computer di sviluppo, ovvero quello utilizzato per generare l'applicazione, È installato Visual Studio 2005 (STD, PRO o TS).

Nei due computer di destinazione della distribuzione Visual Studio 2005 non è installato. La prima destinazione della distribuzione è un computer che esegue un sistema operativo che supporta l'associazione di applicazioni basata su manifesto alle relative dipendenze (Windows XP Home Edition, Windows XP Professional, Windows Server 2003, Windows Vista). Nel secondo computer di destinazione della distribuzione viene eseguito un sistema operativo senza tale supporto (Windows 2000).

L'obiettivo è generare l'applicazione sul computer di sviluppo, distribuirla ai due computer di destinazione e quindi eseguirla.

Preparazione

Dopo aver compilato un binario Visual C++ da eseguire su un altro computer, sarà necessario determinare da quali DLL dipende tale binario. A questo scopo risulta utile lo strumento Dependency Walker. In questa situazione è necessario prendere in considerazione le DLL di Visual C++, in particolare CRT ed MFC. Se si apre la versione di debug di MyApplication.exe in Visual Studio e si esegue una ricerca tra le risorse, è possibile vedere la risorsa RT_MANIFEST. ovvero il manifesto incorporato nel file binario. Se questo viene esportato e aperto come file XML, verrà visualizzato quanto segue:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugMFC" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Questo significa che l'applicazione dipende dagli assembly seguenti:

  • Assembly Microsoft.VC90.DebugCRT, versione 9.0.xxxxx.yy per x86

  • Assembly Microsoft.VC90.DebugMFC, versione 9.0.xxxxx.yy per x86

  • Assembly Microsoft.Windows.Common-Controls, versione 6.0.0.0 per x86

Nel file binario di rilascio verrà visualizzato quanto segue:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Questo significa che l'applicazione dipende dagli assembly seguenti:

  • Assembly Microsoft.VC90.CRT, versione 9.0.xxxxx.yy per x86

  • Assembly Microsoft.VC90.MFC, versione 9.0.xxxxx.yy per x86

  • Assembly Microsoft.Windows.Common-Controls, versione 6.0.0.0 per x86

Manifesti analoghi sono presenti in MyLibrary.dll, sia per il debug che per il rilascio. Si noti che l'ID del manifesto è 1 per l'EXE e 2 per la DLL. Inoltre, se non è incorporato nel file binario, il manifesto viene archiviato come <nomebinario>.<estensione>.manifest con lo stesso contenuto.

Nota:

Visual Studio 2005 non supporta la compilazione di applicazioni C++ senza un manifesto e l'associazione alle librerie di Visual C++ con il vecchio metodo utilizzando %PATH%. Inoltre, le DLL di Visual C++ possono rilevare questo scenario, impedire il caricamento della DLL e segnalare lo scenario non supportato e le modifiche necessarie. Non utilizzare /manifest:no, né eliminare il manifesto.

Tecniche di distribuzione

In questo esempio MyApplication.exe verrà installato in una cartella %TARGET%, che può essere specificata dall'utente durante l'installazione. MyLibrary.dll verrà installata in %TARGET%\MyLibrary e al percorso verrà aggiunto \MyLibrary.

Verranno esaminate due tecniche di distribuzione delle applicazioni VC++:

  1. Generazione di un pacchetto di installazione utilizzando un progetto di installazione e distribuzione.

  2. Distribuzione tramite XCopy.

Per ogni tecnica verranno analizzati due scenari:

  1. Distribuzione di librerie Visual C++ come assembly condivisi.

  2. Distribuzione di librerie Visual C++ come assembly privati.

Nello scenario 1 è presente una sola copia delle DLL di Visual C++ nella cartella WinSxS. Lo scenario 2 prevede invece due copie delle DLL di Visual C++ installate nelle cartelle locali dei file EXE e DLL dell'applicazione.

Nota:

Lo scenario 2 non è supportato in Windows 2000 in quanto la distribuzione nelle cartelle locali dell'applicazione crea problemi.

Vedere anche

Attività

Procedura: distribuire un progetto di installazione e distribuzione

Procedura: distribuire tramite XCopy

Concetti

Esempi di distribuzione