2010-05-04 17 views
5

ARGH! Wix me rend fou. Donc, bien sûr, j'ai vu les nombreux messages à la fois sur stackoverflow et ailleurs sur WiX et les mises à jour majeures. J'ai hérité de ce projet logiciel en utilisant WiX et je publie une nouvelle version. J'ai besoin de cette nouvelle version pour ne laisser que le fichier de configuration s'il est présent, et remplacer tout le reste. Ce programme d'installation fonctionne EXCEPT peu importe ce que j'ai fait jusqu'à présent, le nouveau fichier XML remplace l'ancien sur chaque installation. Même en essayant d'utiliser NeverOverwrite = "oui" et même essayer et déconner avec OnlyDetect = "non"! Je suis simplement coincé et demande humblement un peu de conseils. Le fichier qui doit être conservé s'appelle SETTINGS.XML et se trouve dans le répertoire All Users-> ApplicationData. Voici (plus de) mon fichier .wxs!Bloqué sur la préservation du fichier de configuration dans la mise à jour majeure WIX!

<Package Id='$(var.PackageCode)' 
      Description="Pathways Directory Software" 
      InstallerVersion="301" 
      Compressed="yes" /> 

    <WixVariable Id="WixUILicenseRtf" Value="License.rtf" /> 
    <Media Id="1" Cabinet="Pathways.cab" EmbedCab="yes" /> 

    <Upgrade Id="$(var.UpgradeCode)"> 
     <UpgradeVersion 
      OnlyDetect="no" 
      Maximum="$(var.ProductVersion)" 
      IncludeMaximum="no" 
      Language="1033" 
      Property="OLDAPPFOUND" 
     /> 
     <UpgradeVersion 
      Minimum="$(var.ProductVersion)" 
      IncludeMinimum="yes" 
      OnlyDetect="no" 
      Language="1033" 
      Property="NEWAPPFOUND" 
     /> 
    </Upgrade> 

 <!-- program files directory --> 
     <Directory Id="ProgramFilesFolder"> 
      <Directory Id="INSTALLDIR" Name="Pathways"/> 
     </Directory> 

     <!-- application data directory --> 
     <Directory Id="CommonAppDataFolder" Name="CommonAppData"> 
      <Directory Id="CommonAppDataPathways" Name="Pathways" /> 
     </Directory> 

     <!-- start menu program directory --> 
     <Directory Id="ProgramMenuFolder"> 
      <Directory Id="ProgramsMenuPathwaysFolder" Name="Pathways" /> 
     </Directory> 

     <!-- desktop directory --> 
     <Directory Id="DesktopFolder" /> 

    </Directory> 

    <Icon Id="PathwaysIcon" SourceFile="\\Fileserver\Release\Pathways\Latest\Release\Pathways.exe" /> 

    <!-- components in the reference to the install directory --> 
    <DirectoryRef Id="INSTALLDIR"> 
     <Component Id="Application" Guid="EEE4EB55-A515-4872-A4A5-06D6AB4A06A6"> 
      <File Id="pathwaysExe" Name="Pathways.exe" DiskId="1" Source="\\Fileserver\Release\Pathways\Latest\Release\Pathways.exe" Vital="yes" KeyPath="yes" Assembly=".net" AssemblyApplication="pathwaysExe" AssemblyManifest="pathwaysExe"> 
       <!--<netfx:NativeImage Id="ngen_Pathways.exe" Platform="32bit" Priority="2"/> --> 
      </File> 

      <File Id="pathwaysChm" Name="Pathways.chm" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\Pathways.chm" /> 

      <File Id="publicKeyXml" ShortName="RSAPUBLI.XML" Name="RSAPublicKey.xml" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\RSAPublicKey.xml" Vital="yes" /> 
      <File Id="staticListsXml" ShortName="STATICLI.XML" Name="StaticLists.xml" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\StaticLists.xml" Vital="yes" /> 

      <File Id="axInteropMapPointDll" ShortName="AXMPOINT.DLL" Name="AxInterop.MapPoint.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\AxInterop.MapPoint.dll" Vital="yes" /> 
      <File Id="interopMapPointDll" ShortName="INMPOINT.DLL" Name="Interop.MapPoint.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\Interop.MapPoint.dll" Vital="yes" /> 
      <File Id="mapPointDll" ShortName="MAPPOINT.DLL" Name="MapPoint.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\Interop.MapPoint.dll" Vital="yes" /> 

      <File Id="devExpressData63Dll" ShortName="DAAT63.DLL" Name="DevExpress.Data.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.Data.v6.3.dll" Vital="yes" /> 
      <File Id="devExpressUtils63Dll" ShortName="UTILS63.DLL" Name="DevExpress.Utils.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.Utils.v6.3.dll" Vital="yes" /> 
      <File Id="devExpressXtraBars63Dll" ShortName="BARS63.DLL" Name="DevExpress.XtraBars.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.XtraBars.v6.3.dll" Vital="yes" /> 
      <File Id="devExpressXtraNavBar63Dll" ShortName="NAVBAR63.DLL" Name="DevExpress.XtraNavBar.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.XtraNavBar.v6.3.dll" Vital="yes" /> 
      <File Id="devExpressXtraCharts63Dll" ShortName="CHARTS63.DLL" Name="DevExpress.XtraCharts.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.XtraCharts.v6.3.dll" Vital="yes" /> 
      <File Id="devExpressXtraEditors63Dll" ShortName="EDITOR63.DLL" Name="DevExpress.XtraEditors.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.XtraEditors.v6.3.dll" Vital="yes" /> 
      <File Id="devExpressXtraPrinting63Dll" ShortName="PRINT63.DLL" Name="DevExpress.XtraPrinting.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.XtraPrinting.v6.3.dll" Vital="yes" /> 
      <File Id="devExpressXtraReports63Dll" ShortName="REPORT63.DLL" Name="DevExpress.XtraReports.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.XtraReports.v6.3.dll" Vital="yes" /> 
      <File Id="devExpressXtraRichTextEdit63Dll" ShortName="RICHTE63.DLL" Name="DevExpress.XtraRichTextEdit.v6.3.dll" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\DevExpress.XtraRichTextEdit.v6.3.dll" Vital="yes" /> 

      <RegistryValue Id="PathwaysInstallDir" Root="HKLM" Key="Software\Tribal Data Resources\Pathways" Name="InstallDir" Action="write" Type="string" Value="[INSTALLDIR]" /> 
     </Component> 

    </DirectoryRef> 

    <!-- application data components --> 
    <DirectoryRef Id="CommonAppDataPathways"> 

     <Component Id="CommonAppDataPathwaysFolderComponent" Guid="087C6F14-E87E-4B57-A7FA-C03FC8488E0D"> 
      <CreateFolder> 
       <Permission User="Everyone" GenericAll="yes" /> 
      </CreateFolder> 

      <RemoveFolder Id="CommonAppDataPathways" On="uninstall" /> 
      <RegistryValue Root="HKCU" Key="Software\TDR\Pathways" Name="installed" Type="integer" Value="1" KeyPath="yes" /> 
      <File Id="settingsXml" ShortName="SETTINGS.XML" Name="Settings.xml" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\Settings\settings.xml" Vital="yes" /> 
     </Component> 

     <Component Id="Database" Guid="1D8756EF-FD6C-49BC-8400-299492E8C65D"> 
      <File Id="pathwaysMdf" Name="Pathways.mdf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.mdf" /> 
      <RemoveFile Id="pathwaysLdf" ShortName="Pathways.ldf" Name="Pathways_log.LDF" On="uninstall" /> 
     </Component> 

    </DirectoryRef> 

    <!-- shortcut components --> 
    <DirectoryRef Id="DesktopFolder"> 
     <Component Id="DesktopShortcutComponent" Guid="1BF412BA-9C6B-460D-80ED-8388AC66703F"> 
      <Shortcut Id="DesktopShortcut" 
         Target="[INSTALLDIR]Pathways.exe" 
         Name="Pathways" 
         Description="Pathways Tribal Directory" 
         Icon="PathwaysIcon" 
         Show="normal" 
         WorkingDirectory="INSTALLDIR" /> 
      <RegistryValue Root="HKCU" Key="Software\TDR\Pathways" Name="installed" Type="integer" Value="1" KeyPath="yes"/> 
     </Component> 
    </DirectoryRef> 

    <DirectoryRef Id ="ProgramsMenuPathwaysFolder"> 
     <Component Id="ProgramsMenuShortcutComponent" Guid="83A18245-4C22-4CDC-94E0-B480F80A407D"> 
      <Shortcut Id="ProgramsMenuShortcut" Target="[INSTALLDIR]Pathways.exe" Name="Pathways" Icon="PathwaysIcon" Show="normal" WorkingDirectory="INSTALLDIR" /> 
      <RemoveFolder Id="ProgramsMenuPathwaysFolder" On="uninstall"/> 
      <RegistryValue Root="HKCU" Key="Software\TDR\Pathways" Name="installed" Type="integer" Value="1" KeyPath="yes"/> 
     </Component> 
    </DirectoryRef> 


    <Feature Id="App" Title="Pathways Application" Level="1" Description="Pathways software" Display="expand" ConfigurableDirectory="INSTALLDIR" Absent="disallow" AllowAdvertise="no" InstallDefault="local"> 
     <ComponentRef Id="Application" /> 
     <ComponentRef Id="CommonAppDataPathwaysFolderComponent" /> 
     <ComponentRef Id="ProgramsMenuShortcutComponent" /> 
     <Feature Id="Shortcuts" Title="Desktop Shortcut" Level="1" Absent="allow" AllowAdvertise="no" InstallDefault="local"> 
      <ComponentRef Id="DesktopShortcutComponent" /> 
     </Feature> 
    </Feature> 


    <Feature Id="Data" Title="Database" Level="1" Absent="allow" AllowAdvertise="no" InstallDefault="local"> 
     <ComponentRef Id="Database" /> 
    </Feature> 

    <!-- <UIRef Id="WixUI_Minimal" /> --> 
    <UIRef Id ="WixUI_FeatureTree"/> 
    <UIRef Id="WixUI_ErrorProgressText"/> 

    <UI> 
     <Error Id="2000">There is a later version of this program installed.</Error> 
    </UI> 

    <CustomAction Id="NewerVersionDetected" Error="2000" /> 

    <InstallExecuteSequence> 
     <RemoveExistingProducts After="InstallFinalize"/> 
    </InstallExecuteSequence> 

</Product> 

+1

Avez-vous trié cela? Vos composants ne sont pas conformes aux meilleures pratiques. Vous devez utiliser un seul binaire par composant. Pour éviter les problèmes, je recommande un composant par fichier pour les petits projets. Mettez seulement plusieurs fichiers dans un composant si vous savez ce que vous faites et/ou si votre configuration est énorme. En raison de la nature du programme d'installation de Windows, vous ne pourrez pas conserver correctement le fichier settings.xml jusqu'à ce que vous ayez changé la création du composant. Vous devez écrire une action personnalisée pour sauvegarder le fichier de paramètres au début de la séquence d'installation, puis le remettre en place après l'installation. –

Répondre

0

La première chose que vous aurez probablement besoin de faire est de se débarrasser de cette RemoveFolder dans votre composant CommonAppDataPathwaysFolderComponent. Cela va supprimer votre répertoire et tout ce qu'il contient (y compris settings.xml). Ajoutez le neveroverwrite et voyez ce qui se passe.

Quelle version de wix utilisez-vous? 3 pas vrai?

+0

Oui, version 3. – Joshua

0

Le programme d'installation de Windows installe uniquement un composant si le clavier n'est pas encore présent ou pointe vers un fichier avec une version inférieure. Dans le cas typique d'un composant à un seul fichier, wix utilise par défaut ce fichier en tant que keypath. Dans ce cas, le keypath du composant CommonAppDataPathwaysFolderComponent est une clé de registre; il a été marqué explicitement avec l'attribut keypath=yes.

Vous programmez la désinstallation de l'ancienne version après l'installation de la nouvelle version. Donc, si le keypath de ce composant est le même pour l'ancienne et la nouvelle version, alors les choses devraient fonctionner comme vous le souhaitez.

Le fait que cela ne fonctionne pas implique que vous avez modifié le keypath du composant. Apparemment, l'ancien installateur n'a pas écrit une valeur "Software \ TDR \ Pathways, Installed = 1" dans le registre. Le nouveau programme d'installation recherche cette clé de registre, ne la trouve pas et décide d'installer le CommonAppDataPathwaysFolderComponent - en remplaçant l'ancien fichier SETTINGS.XML dans le processus.

0

lors de l'exécution de votre code dans un test j'ai eu cet avertissement

avertissement LGHT1076: ICE57: Composant 'CommonAppDataPathwaysFolderComponent' a deux pe r-utilisateur et par machine données avec un HKCU Registre KeyPath.

et L'erreur dans le fichier journal tout en exécutant votre code est ce

C: \ Documents and Settings \ All Users \ Application Data \ Pathways \ Settings.xml; Écraser; Ne sera pas patch; Le fichier existant est sans version et non modifié - hachage ne correspond pas à fichier source

qui indique le composant de fichier XML a données par la machine (le fichier xml) avec un par registre d'utilisateurs chemin de clé.

Utilisez le fichier xml comme keypath pour le composant comme ceci:

<Component Id="CommonAppDataPathwaysFolderComponent" Guid="087C6F14-E87E-4B57-A7FA-C03FC8488E0D"> 
    <CreateFolder> 
     <Permission User="Everyone" GenericAll="yes" /> 
    </CreateFolder> 

    <RemoveFolder Id="CommonAppDataPathways" On="uninstall" /> 
    <File Id="settingsXml" KeyPath="yes" ShortName="SETTINGS.XML" Name="Settings.xml" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\Settings\settings.xml" Vital="yes" /> 
</Component> 

Cela fera la comparaison de fichiers, utilisez Windows Installer sans version au moment de décider si oui ou non pour remplacer ce fichier.

Vous avez correctement planifié l'action RemoveExistingProducts après l'action InstallFiles qui s'assure que les nouvelles versions sont installées avant de supprimer les anciennes versions.

+1

En essayant cela, vous vous êtes débarrassé de l'erreur de lumière, mais le problème persiste, le fichier de paramètres est remplacé. Et aussi, les fichiers MDF et LDF que j'ai besoin d'être remplacés restent. – Joshua

+0

Je me demande si c'est parce que l'ancien composant de la version installée est différent du plus récent, il a un autre mot de passe et doit donc être réinstallé. Si tel est le cas, il n'y a pas grand-chose que vous pouvez faire d'autre qu'une action personnalisée qui copie le fichier à un emplacement temporaire, puis à nouveau une fois que tout a été installé. –

+0

S'il vous plaît voir mon poste comme une réponse à cette question. C'est proche! Mettre les paramètres dans son propre composant a aidé, et maintenant le problème est que la base de données est préservée aussi, et cela doit être remplacé! JE VOUS REMERCIE! – Joshua