2012-04-02 10 views
5

Utilizzo Wix 3.5 con WixVSExtension per installare modelli di elementi di progetto per Visual Studio 2010, Visual C# 2010 Express e Visual Web Developer 2010 Express. Mi piacerebbe ora aggiungere il supporto per Visual Studio 11 Beta.Registra componenti aggiuntivi, modelli di progetto e modelli di elementi per Visual Studio 11

ho aggiunto del Registro di sistema di ricerca e personalizzati azioni di trovare le cartelle di installazione VS11, ma, quando si specifica directory e componenti la struttura, sto ottenendo gli errori di compilazione come questo:

errore LGHT0204: ICE30: Il file di destinazione 'ewa5nwrn .zip | BasicApplication.zip 'è installato in' [TARGETDIR] \ CSharp \ 'da due diversi componenti su un sistema LFN:' VS2010CSharpProjectTemplates 'e' VS11CSharpProjectTemplates '. Ciò interrompe il conteggio dei riferimenti dei componenti.

ho questa struttura di directory:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="VS2010_PROJECTTEMPLATES_DIR"> 
    <Directory Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp"> 
    </Directory> 
    </Directory> 
    <Directory Id="VS11_PROJECTTEMPLATES_DIR"> 
    <Directory Id="VS11_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp"> 
    </Directory> 
    </Directory> 
</Directory> 

Si noti che ho VS2010_PROJECTTEMPLATES_DIR e VS11_PROJECTTEMPLATES_DIR all'interno TARGETDIR. Il messaggio di errore mostra che sono ignorati.

I componenti sono definiti come segue:

<DirectoryRef Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR"> 
    <Component Id="VS2010CSharpProjectTemplates" Guid="{0976A222-8243-40F2-81AB-84D8F1771840}" Transitive="yes"> 
    <File Id="VS2010BasicApplication" Source="BasicApplication.zip" /> 
    </Component> 
</DirectoryRef> 

<DirectoryRef Id="VS11_PROJECTTEMPLATES_CSHARP_DIR"> 
    <Component Id="VS11CSharpProjectTemplates" Guid="{A70428F1-AE26-4B07-9F58-D67587B44657}" Transitive="yes"> 
    <File Id="VS11BasicApplication" Source="BasicApplication.zip" /> 
    </Component> 
</DirectoryRef> 

E 'possibile installare lo stesso file in due directory diverse specificato dalla proprietà?

Grazie in anticipo, aalmada

risposta

2

Non ho alcun codice sorgente per condividere, ma vi posso dire, in generale, come ho fatto in passato.

Abbiamo deciso di "installare" i file zip nella nostra directory principale dell'applicazione in una cartella Integration in modo che i file fossero sempre disponibili anche se VS2008 e/o VS2010 non fossero stati installati al momento dell'installazione. Ho quindi utilizzato una serie di proprietà integrate esistenti nell'estensione Util e un paio di ricerche RegLocator personalizzate per definire un gruppo di proprietà correlate alla posizione di devenv.exe e ItemTemplate, ProjectTemplates e altre directory necessarie in .NET. Ho quindi utilizzato tali proprietà negli elementi CopyFile in modo che MSI duplicasse quei file nella cartella Integration nelle directory VS effettive come necessario e approriate. Finalmente ho usato l'azione personalizzata WiX QuietExec per chiamare Devenv/setup per registrare il contenuto con VS. Ho anche usato l'elemento ProgressText (la tabella ActionText) per rendere l'interfaccia grafica buona mentre tutto questo stava accadendo mentre VS devenv può richiedere un po 'di tempo.

+0

Penso che l'uso di 'CopyFile' non sia un valore te, poiché i file copiati non verranno mai disinstallati. Immagino che potresti gestirlo usando anche l'elemento 'RemoveFile', ma sarebbe meglio usare la normale logica di installazione dei componenti che dovrebbe occuparsi di tutto questo automaticamente. –

+0

Wix 3.5 supporta la stessa installazione di file in più directory. Hai solo bisogno di impostare diversi ID per ogni riferimento . I miei problemi erano apparentemente diversi .. – aalmada

+0

Wim - Non è vero. Non abbiamo mai avuto problemi con la disinstallazione e abbiamo supportato il targeting 2005, 2008 e 2010. La cosa bella dei file duplicati era che se la proprietà non fosse mai stata impostata su un valore, non avrebbe fatto nulla. Questa soluzione ha sostituito un instlaller VDPROJ che utilizzava azioni personalizzate installane pessime e superava tutti i test di validazione e si comportava in modo meraviglioso. Era molto elegante. –

2

Come spiegato nella documentazione Wix dell'elemento Directory: quando si omette il Name attributo che si sta creando un alias per l'elemento genitore Directory.

Questo viene fatto registrando "." come nome della directory nel database del programma di installazione, come spiegato nella documentazione del programma di installazione di Windows per Directory table.

Nel tuo caso, credo che tu tenti di cambiare questo "." valore in un nome di directory reale impostando le proprietà VS2010_PROJECTTEMPLATES_DIR e VS11_PROJECTTEMPLATES_DIR (perché directories are properties) durante l'installazione.

Va bene, ma il problema qui è che il linker light non sa quali valori si imposteranno queste proprietà durante l'installazione. Ha solo il valore dell'attributo Name su cui lavorare.E al momento del collegamento, sembra che tu stia installando lo stesso file due volte nella stessa directory.

Per risolvere questo problema, aggiungere gli attributi Name con valori di segnaposto diversi agli elementi della directory VS2010_PROJECTTEMPLATES_DIR e VS11_PROJECTTEMPLATES_DIR.

+0

L'aggiunta di una proprietà Name a VS2010_PROJECTTEMPLATES_DIR e VS11_PROJECTTEMPLATES_DIR non ha funzionato, ma l'aggiunta delle directory di base con il set di proprietà Name ha funzionato. Grazie! – aalmada

2

ho finito per l'aggiunta di due directory di base, sotto TARGETDIR, con le proprietà nome impostato:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="VS2010" Name="VS2010"> 
    <Directory Id="VS2010_PROJECTTEMPLATES_DIR"> 
     <Directory Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp"> 
     </Directory> 
    </Directory> 
    </Directory> 
    <Directory Id="VS11" Name="VS11"> 
    <Directory Id="VS11_PROJECTTEMPLATES_DIR"> 
     <Directory Id="VS11_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp"> 
     </Directory> 
    </Directory> 
    </Directory> 
</Directory> 

Ecco il codice per le proprietà (in base al codice WixVSExtension):

<Property Id="VS11DEVENV" Secure="yes"> 
    <RegistrySearch Id="VS11DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentPath" Type="raw"/> 
</Property> 

<Property Id="VS11_ROOT_FOLDER" Secure="yes"> 
    <RegistrySearch Id="SearchForVS11RootPath" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw"/> 
</Property> 

<Property Id="VS11_PROJECTTEMPLATES_DIR" Secure="yes"> 
    <RegistrySearch Id="VS11DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw"> 
    <DirectorySearch Id="VS11ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" /> 
    </RegistrySearch> 
</Property> 

<Property Id="VS11_ITEMTEMPLATES_DIR" Secure="yes"> 
    <RegistrySearch Id="VS11DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw"> 
    <DirectorySearch Id="VS11ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" /> 
    </RegistrySearch> 
</Property> 

<CustomAction Id="VS11InstallVSTemplates" Property="VS11DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" /> 

Ho quindi scoperto che i modelli VS2010 non si espandono correttamente sotto VS11 ma questa è una domanda diversa ora ...: -/

+0

WiX 3.6 RC0 è stato appena annunciato oggi. Probabilmente è stato trovato il supporto per le proprietà VS11 *. –

+0

Ho eseguito l'upgrade a WiX 3.6 RC0 e ora sto utilizzando le nuove proprietà e azioni WixVSExtension per Visual Studio 11. Grazie! – aalmada

+0

Ciao. Puoi condividere con noi come sei riuscito a installarlo in edizione 2012 Express Desktop? – Goran

Problemi correlati