Condividi tramite


Risoluzione dei problemi della distribuzione basata su Windows Installer

Aggiornamento: novembre 2007

Negli argomenti illustrati in questa sezione vengono esaminati i diversi problemi che è possibile riscontrare quando si creano e si distribuiscono applicazioni.

Un'applicazione MFC non viene localizzata quando è installata in un computer con impostazioni locali diverse dall'inglese.

Quando si distribuisce un'applicazione MFC utilizzando un progetto di distribuzione di Visual Studio, le dipendenze dei moduli unione localizzati Mfc_loc_e.msm e Mfc_loc_fe.msm non vengono rilevate. I moduli unione sono inclusi in Visual C++; il percorso predefinito dell'installazione è \Programmi\Common\Moduli unione. Per distribuire un'applicazione MFC localizzata, è necessario aggiungere manualmente i due moduli unione al progetto di distribuzione. Per ulteriori informazioni, vedere Distribuzione e dipendenze.

Le dipendenze assembly non sono state rilevate

Quando un gruppo di output del progetto, un assembly o un modulo unione viene aggiunto a un progetto di distribuzione, qualsiasi assembly dipendente viene automaticamente rilevato e aggiunto al progetto. Se un assembly dipendente viene caricato in fase di esecuzione mediante codice, non può essere rilevato dagli strumenti di distribuzione. Evitare, se possibile, di caricare assembly mediante codice. Aggiungere manualmente gli assembly dipendenti al progetto di distribuzione. Per ulteriori informazioni, vedere Distribuzione e dipendenze.

Dopo l'installazione, non è possibile trovare i file in un server Web

Quando si installa un progetto di installazione Web su un server Web, la proprietà VirtualDirectory per la cartella Applicazione Web e per qualsiasi cartella Web personalizzata determina il percorso in cui verranno installati i file all'interno delle cartelle in questione rispetto alla radice Web. Se questa proprietà viene lasciata vuota, i file saranno installati nella cartella Web principale: inetpub\wwwroot. Per ulteriori informazioni, vedere Proprietà VirtualDirectory.

Come si installa un'applicazione Web sulla directory principale di un server Web?

Per impostazione predefinita, quando si installa un'applicazione Web utilizzando un progetto di distribuzione per installazione Web, i file vengono installati in una cartella con lo stesso nome del progetto di distribuzione direttamente al di sotto della cartella radice Web. La proprietà VirtualDirectory della cartella Applicazione Web determina la posizione in cui vengono installati i file. Per eseguire l'installazione nella radice Web, impostare la proprietà VirtualDirectory su null (eliminare il valore predefinito). Per ulteriori informazioni, vedere Proprietà VirtualDirectory.

Non è possibile eseguire il debug su applicazioni Web distribuite utilizzando il comando Xcopy

Quando un'applicazione Web viene copiata su un server Web utilizzando il comando Xcopy, Internet Information Services (IIS) non viene configurato automaticamente per l'applicazione. Il debug non funzionerà perché la cartella dell'applicazione non viene riconosciuta come radice dell'applicazione.

Dopo avere eseguito la copia, sarà necessario impostare la nuova cartella come radice dell'applicazione utilizzando IIS Manager. Inoltre, si dovranno impostare le autorizzazioni per la cartella Bin dell'applicazione per evitare che le DLL vengano sottoposte a download.

Suggerimento:

Invece del comando Xcopy, è preferibile utilizzare il comando Copia progetto o un progetto di distribuzione per installazione Web. Per ulteriori informazioni, vedere Alternative di distribuzione.

Come si disattiva l'analisi delle dipendenze?

Purtroppo non è possibile disattivare direttamente la ricerca e la risoluzione dell'analisi delle dipendenze. Tuttavia, è possibile ovviare a questo problema deselezionando l'opzione Includi percorsi di ricerca standard nella finestra di dialogo che viene visualizzata quando si fa clic sulla proprietà SearchPath.

Occorre considerare alcuni punti aggiuntivi:

  • È necessario aggiungere i file utilizzando il comando Aggiungi file (scegliere Aggiungi dal menu Progetto, quindi File). Se si utilizza Aggiungi output progetto (scegliere Aggiungi dal menu Progetto, quindi Output progetto), verranno incluse le dipendenze riportate dal progetto codificato.

  • In fase di compilazione, è possibile che vengano visualizzati uno o più avvisi del tipo Impossibile trovare la dipendenza che, in questo caso, possono essere ignorati.

  • Se si desidera disattivare l'analisi delle dipendenze solo per alcuni file, è possibile inserire tali file in un progetto di modulo unione con percorsi di ricerca standard disattivati. Utilizzare quindi Aggiungi - Modulo unione (scegliere Aggiungi dal menu Progetto, quindi Aggiungi - Modulo unione) per includere il file con estensione msm in un normale progetto di installazione con percorsi di ricerca attivati.

Come disattivare il ripristino di un file che dovrebbe essere modificato o eliminato dagli utenti?

In Visual Studio vengono creati collegamenti con annunci in modo che, all'avvio, il programma verifichi l'esistenza di tutti i propri file. Per modificare questo comportamento e fare in modo che il file non venga ripristinato, selezionare i file nel progetto di installazione e impostare la proprietà Condition su NOT REINSTALL, per evitare che il file venga reinstallato durante un ripristino, e la proprietà Transitive su TRUE di modo che la condizione venga rivalutata. Di conseguenza, durante l'operazione che consente di verificare che il file non sia stato reinstallato, il programma di installazione comparirà per un attimo sullo schermo un'unica volta, in seguito all'eliminazione del file, ma successivamente non verrà più visualizzato.

Come eseguire il debug di un'azione personalizzata o della classe del programma di installazione?

È possibile utilizzare uno dei seguenti metodi:

  • Aggiungere una chiamata al codice per System.Diagnostics.Debugger.Launch. Con questo metodo viene aperto il debug JIT ed è possibile aggiungere al codice un nuovo debugger.

  • Aggiungere una chiamata al codice per MessageBox.Show("Debug Me"). Quando viene visualizzata la finestra di messaggio, utilizzare Visual Studio per l'associazione al processo MessageBox. Aggiungere quindi nel codice interruzioni per i progetti Visual C# o arresti per i progetti Visual Basic.

  • Impostare le preferenze di debug in modo da avviare InstallUtil.exe, situato in \winnt\Microsoft.net\Framework\versione, e passarlo all'assembly come parametro. Quando si preme il tasto F5, si raggiunge il punto di interruzione. InstallUtil.exe esegue le azioni personalizzate esattamente come MSI.

La registrazione di assembly con le interfacce COM non è possibile.

Si tratta di un errore noto di RegAsm. Se l'assembly dispone di una dipendenza, ad esempio in un'altra libreria della classe, è possibile che RegisterCOM non funzioni perché per ottenere le informazioni di registrazione viene chiamato RegAsm. Poiché RegAsm viene chiamato nella directory \obj, non è possibile trovare la dipendenza e RegAsm genera un errore senza notifica. La soluzione migliore consiste nell'aggiungere manualmente l'assembly dalla directory \bin. Un'altra soluzione consiste nell'utilizzo di RegisterSelfReg.

Verificare inoltre che venga effettuata la registrazione manuale utilizzando RegAsm/Codebase. Se l'assembly non si trova in una posizione condivisa, non viene individuato a meno che non si trovi nella stessa directory del codice chiamante. /Codebase inserisce la directory nel Registro di sistema.

Come risolvere i problemi relativi alle installazioni di Windows Installer utilizzando i file di log

Le operazioni di Windows Installer vengono registrate in un file di log durante l'installazione dei programmi. Il file log si trova nella directory in cui risiede il file con estensione msi.

Come si ottiene il file log di installazione?

Sono disponibili due modalità:

  • Eseguire il comando dalla riga di comando utilizzando l'opzione di registrazione:

    misexec /i mysetup.msi /l*v mylog.txt
    
  • Salvare il codice seguente come file reg e caricarlo nel Registro di sistema:

    REGEDIT4
    
    [HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer]
    "Logging"="voicewarmup"
    "Debug"=dword:00000007
    

    Aprire quindi la directory \temp e ordinare i file in base alla data. Il più recente file msi*.log proviene dall'installazione o dalla disinstallazione più recente.

Come eseguire l'installazione di un prodotto in una sottodirectory di un prodotto già installato

  1. Si supponga che il prodotto già installato, ad esempio Prodotto 1, sia installato e contenga un file denominato MyFile.txt.

  2. Per visualizzare la tabella File utilizzare ORCA, disponibile nell'SDK di Windows Installer, e individuare la riga che rappresenta MyFile.txt.

  3. Prendere nota del valore della colonna Component_, quindi aprire la tabella dei componenti.

  4. Nella tabella dei componenti, individuare la riga con il valore Component_ appropriato nella colonna dei componenti e ottenere l'oggetto ComponentID. Copiare questo valore negli Appunti. Chiudere ORCA.

  5. Nel progetto di installazione, aprire l'Editor delle condizioni di avvio e aggiungere una ricerca di componenti di Windows Installer. Per la proprietà ComponentID della nuova ricerca, incollare ComponentID.

  6. Copiare la proprietà Property. Dovrebbe essere una proprietà del tipo COMPONENTEXISTS1.

  7. Aprire l'Editor del file system e selezionare Cartella Applicazione.

  8. Modificare la proprietà DefaultLocation in modo che diventi [COMPONENTEXISTS1]MySubFolder, perché il percorso di COMPONENTEXISTS1 include una barra rovesciata '\' finale.

Dopo il passaggio 6 della procedura precedente, può essere necessario aggiungere una condizione all'Editor delle condizioni di avvio per controllare se è stato individuato il componente e, in caso contrario, per bloccare l'installazione e visualizzare un messaggio. La condizione deve essere COMPONENTEXISTS1, che indica che è possibile eseguire il programma di installazione se COMPONENTEXISTS1 non è vuoto.

Come si installano le cartelle Web personalizzate in una porta non predefinita?

Per installare le cartelle Web personalizzate in una porta non predefinita, eseguire l'installazione dalla riga di comando. Il comando deve comprendere i valori della proprietà Property per ciascuna delle cartelle Web personalizzate. Il valore, in genere, ha il seguente aspetto NEWWEBPROPERTY1. Per la Cartella Applicazione Web è necessario includere anche TARGETPORT.

Se, ad esempio, il server Web si trova sulla porta 20, l'aspetto della riga di comando deve essere il seguente:

msiexec /i mywebsetup.msi TARGETPORT=20 NEWWEBPROPERTY1PORT=20

Tale comando è valido per una sola cartella Web. Se si dispone di più cartelle Web, aggiungere ulteriori coppie PROPERTY=VALUE per ciascuna cartella, come specificato nell'esempio di codice, affinché la porta di ciascuna cartella dell'elenco venga reindirizzata alla porta specificata.

Può essere necessario rimuovere la finestra di dialogo Percorso di installazione, poiché se si modifica la porta dell'interfaccia utente durante l'installazione, le cartelle Web personalizzate utilizzeranno il valore della riga di comando.

Come si esegue l'installazione a livello di radice di un sito Web?

Per eseguire l'installazione a livello di radice di un sito Web, ad esempio, c:\inetpub\wwwroot, impostare VirtualDirectory su una stringa vuota, nel progetto di installazione Web o nel corso dell'installazione.

Come si esegue l'installazione di ServicedComponent nella Global Assembly Cache e lo si configura nel catalogo COM+?

Se si tenta di installare ServicedComponent nella Global Assembly Cache e di configurarlo nel catalogo COM+, è possibile che venga generato l'errore di compilazione seguente:

"Unable to build custom action named 'Primary output from RegServer (Active)' because the file's Folder property is set to Global Assembly Cache."

Questa installazione non è supportata, perché quando vengono eseguite le azioni personalizzate, gli assembly presenti nella Global Assembly Cache non sono sempre disponibili, in quanto viene eseguito il commit nella GAC.

La soluzione consiste nell'inserimento di codice in file diversi e, se possibile, nell'inserimento del codice dell'azione personalizzata in un file non diretto alla Global Assembly Cache. Talvolta non è possibile distribuire il codice in questo modo.

Come si esegue automaticamente il programma dopo l'installazione?

  1. A questo scopo, creare un file con estensione vbs con il codice seguente:

    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run """" & Property("CustomActionData") & """",7,False
    Set WshShell = Nothing
    
  2. Aprire il progetto di installazione e accedere all'Editor delle azioni personalizzate.

  3. Selezionare il nodo Commit, fare clic con il pulsante destro del mouse e aggiungere una nuova Azione personalizzata.

  4. Sfogliare il file system per aggiungere il file con estensione vbs creato al passaggio 1.

  5. Modificare la proprietà CustomActionData aggiungendo quanto segue (dove YourApp.exe rappresenta il nome del file di avvio dell'applicazione):

    [TARGETDIR]YourApp.exe

Come si crea un collegamento di disinstallazione nel collegamento?

  1. Nella directory del progetto di installazione, creare un nuovo file Uninstall.bat.

  2. Nel progetto di installazione, copiare la proprietà ProductCode, il cui valore dovrebbe essere simile a [12345678-1234-1234-1234-123412341234].

  3. Modificare Uninstall.bat in modo che in una delle righe sia presente la stringa seguente, in cui ProductCode è il valore copiato al passaggio 2:

    Msiexec /x ProductCode

  4. Aggiungere Uninstall.bat alla cartella applicativa del progetto di installazione.

  5. Fare clic con il pulsante destro del mouse su Uninstall.bat, quindi scegliere Crea collegamento per creare un collegamento.

  6. Inserire il collegamento nella cartella del menu di avvio appropriata del progetto di installazione.

  7. Rinominare il collegamento utilizzando, ad esempio, la dicitura "Disinstalla <NomeApplicazione>".

Dove trovare esempi di utilizzo dei progetti di installazione

Per esempi di utilizzo dei progetti di installazione, vedere Procedure dettagliate relative alla distribuzione con Windows Installer.

Come pianificare la distribuzione delle applicazioni per .NET Framework

In questa guida vengono fornite le informazioni necessarie per pianificare e implementare un'efficiente distribuzione delle applicazioni per .NET Framework: Deploying .NET Framework-based Applications (informazioni in lingua inglese).

Dove è possibile eseguire il download dell'SDK di Windows Installer?

È possibile eseguire il download dell'SDK di Windows Installer dal sito Web Platform SDK, all'indirizzo:

https://www.microsoft.com/downloads/details.aspx?familyid=a55b6b43-e24f-4ea3-a93e-40c0ec4f68e5&displaylang=en

Dove si possono trovare gli aggiornamenti e la Guida di Crystal Reports?

Il software aggiornato e i moduli unione possono essere installati dalla pagina relativa ai download del sito Web BusinessObjects.com, all'indirizzo:

http://support.businessobjects.com/fix/downloads_updates.asp

Dove trovare un programma di avvio per l'installazione di .NET Framework con l'applicazione in uso

L'esempio del programma di avvio automatico Microsoft .NET Framework Setup.exe si può trovare all'indirizzo:

https://www.microsoft.com/downloads/details.aspx?familyid=bf253cfd-1efc-4fc5-ba7e-6a6f21403495&displaylang=en

Il plug-in di avvio automatico di Visual Studio .NET Framework si può trovare al seguente indirizzo:

http://workspaces.gotdotnet.com/vsboot

Come si risolvono i messaggi di errore "Errore di compilazione irreversibile"?

Se viene visualizzato il messaggio di errore "Errore di compilazione irreversibile" durante la compilazione dei progetti di installazione e di distribuzione, leggere il seguente articolo:

"PRB: 'Unrecoverable Build Error' Error Message When You Build Setup and Deployment Projects" (informazioni in lingua inglese) all'indirizzo https://support.microsoft.com/kb/329214/it.

Come si risolvono i messaggi di errore di convalida?

Se vengono visualizzati messaggi di errore, quali An error occurred when validating. HRESULT = '80040155, vedere l'articolo "PRB: "Unrecoverable Build Error" Error Message When You Build Setup and Deployment Projects" all'indirizzo https://support.microsoft.com/kb/329214/it e attenersi alla procedura relativa alle registrazioni mancanti delle intestazioni.

Come si modifica IIS durante la distribuzione delle azioni personalizzate?

Nell'articolo "Modifying Internet Information Services During Deployment with Custom Actions", disponibile all'indirizzo https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchusingcustomactionstomodifyinternetinformationserverduringdeployment.asp?frame=true (informazioni in lingua inglese), viene illustrata la risoluzione di vari problemi. inclusi i seguenti:

  • Come modificare le impostazioni di una cartella IIS non disponibili in una cartella Web dell'Editor del file system

  • Come distribuire un'applicazione ibrida che utilizzi sia Visual Basic 6 sia Visual Basic .NET o una versione successiva

  • Modifiche nella distribuzione di applicazioni Visual Studio .NET o versioni successive rispetto ad applicazioni Visual Basic 6

Dove si possono trovare informazioni sulla distribuzione in modalità autonoma?

Vedere "No-Touch Deployment in the .NET Framework" (in inglese) all'indirizzo https://msdn.microsoft.com/library/en-us/dv_vstechart/html/vbtchno-touchdeploymentinnetframework.asp.

Come si esegue la distribuzione di applicazioni ASP.NET?

Per informazioni sulla distribuzione di un'applicazione ASP.NET tramite Visual Studio .NET, vedere Deploying an ASP.NET App Using Visual Studio .NET (informazioni in lingua inglese).

Dopo l'installazione in Windows 2000, l'applicazione non viene eseguita e viene visualizzato un messaggio di avviso in cui si richiede MDAC 2.8

Tutte le applicazioni che fanno riferimento allo spazio dei nomi di System.Data presentano una dipendenza da Microsoft Data Access Components (MDAC) 2.8 o versione successiva. Nella maggior parte dei casi, il file è stato già installato insieme al sistema operativo. Con Windows 2000 Service Pack 3 e precedenti, è possibile che sia necessario installare il componente con l'applicazione. In tal caso, aggiungere il componente al package del programma di avvio automatico e scaricare il file da Microsoft durante l'installazione. Per ulteriori informazioni, vedere Distribuzione dei prerequisiti (Visual Studio).

Articoli correlati in Microsoft Knowledge Base

Nei seguenti articoli della Knowledge Base vengono fornite informazioni sui problemi di distribuzione di Windows Installer (informazioni in lingua inglese):

Vedere anche

Concetti

Distribuzione e dipendenze

Alternative di distribuzione

Riferimenti

Proprietà VirtualDirectory

Altre risorse

Distribuzione di applicazioni e componenti

Procedure dettagliate relative alla distribuzione con Windows Installer