坚持在WIX重大升级中保留配置文件! [英] Stuck on preserving config file in WIX major upgrade!

查看:73
本文介绍了坚持在WIX重大升级中保留配置文件!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

啊! Wix令我发疯.

因此,我当然在堆栈溢出和其他地方都看到过许多关于WiX和主要升级的文章.我使用WiX继承了该软件项目,并正在发布新版本.我需要这个新版本,以仅保留一个配置文件(如果存在),并替换其他所有文件.到目前为止,无论我做了什么,该安装程序都可以正常工作,每次安装时,新的XML文件都会替换旧的XML文件.甚至尝试使用NeverOverwrite ="yes",甚至尝试和OnlyDetect ="no"来回搅乱!我只是被困住了,谦卑地要求一点指导.需要保留的文件称为SETTINGS.XML,位于所有用户"->"ApplicationData"目录中.这是(大部分)我的.wxs文件!

解决方案

在测试中运行代码时,我收到此警告

警告LGHT1076:ICE57:组件 'CommonAppDataPathwaysFolderComponent' 既有超级用户又有每台机器 使用HKCU注册表键路径访问数据.

和 运行代码时日志文件中的错误是

C:\ Documents and Settings \ All 用户\应用 Data \ Pathways \ Settings.xml;覆盖;惯于 修补;现有文件未版本控制 并且未修改-哈希不匹配 源文件

这表示xml文件组件具有每台计算机数据(xml文件)和每用户注册表项路径.

使用xml文件作为组件的键路径,如下所示:

<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>

这将使Windows Installer在决定是否替换此文件时使用未版本控制的文件比较.

您已经在InstallFiles操作之后正确安排了RemoveExistingProducts操作,以确保在删除旧版本之前已安装新版本.

ARGH! Wix is driving me crazy.

So, of course I have seen the many posts both here on stackoverflow and elsewhere about WiX and major upgrades. I inherited this software project using WiX and am releasing a new version. I need this new version to leave ONLY the one configuration file if it's present, and replace everything else. This installer works EXCEPT no matter what I have done so far, the new XML file replaces the old on every install. Even attempting to use NeverOverwrite="yes" and even trying and messing back and forth with OnlyDetect="no"! I am simply stuck and humbly request a little guidance. The file that needs to be preserved is called SETTINGS.XML and is in the All Users->ApplicationData directory. Here is (most of) my .wxs file!

    <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>

解决方案

when running your code in a test I got this warning

warning LGHT1076 : ICE57: Component 'CommonAppDataPathwaysFolderComponent' has both pe r-user and per-machine data with an HKCU Registry KeyPath.

and The error in the log file whilst running your code is this

C:\Documents and Settings\All Users\Application Data\Pathways\Settings.xml; Overwrite; Won't patch; Existing file is unversioned and unmodified - hash doesn't match source file

Which indicates the xml file component has per machine data (the xml file) with a per user registry key path.

Use the xml file as a keypath for the component like so:

<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>

This will make Windows Installer use unversioned file comparison when deciding whether or not to replace this file.

you have correctly scheduled RemoveExistingProducts action after the InstallFiles action which makes sure that the new versions are installed before removing the old versions.

这篇关于坚持在WIX重大升级中保留配置文件!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆