2011-03-06 54 views
1

我的应用程序有一个设置文件,我需要保持当用户卸载应用程序。我可以使用组件做到这一点,还是需要使用自定义操作?WiX:保存(重命名)文件在卸载

这是我到目前为止(不工作):

<Directory Id="INSTALLLOCATION" Name="_MyApp"> 
    <Component> 
    <File KeyPath="yes" Source="$(var.Source)\settings.ini" /> 
    </Component> 
    <Component Id="Backup" Guid="SOME-GUID"> 
    <Condition>REMOVE=ALL</Condition> 
    <CopyFile Id="settings.ini" Delete="no" SourceProperty="INSTALLLOCATION" DestinationProperty="INSTALLLOCATION" SourceName="settings.ini" DestinationName="settings.ini.bak" /> 
    </Component> 
</Directory> 

如果它的事项,这些组件属于:

<Feature Id="Default" Level="1"> 
    <ComponentRef Id="settings.ini" /> 
    <ComponentRef Id="Backup" /> 
</Feature> 

我怀疑这并不工作,因为行动MoveFiles后运行RemoveFiles,然后没有什么可以移动的,所以我从安装程序中删除settings.ini并在安装后手动复制它。我一直在想这种方式,在RemoveFiles之后ini文件仍然存在,并且它将被重命名。那么,ini文件确实存在,但它不会被重命名。任何想法为什么?

回答

1

Windows Installer没有用于备份和恢复文件的内置机制。通常解决方案是使用复制文件的自定义操作。

我除去从安装 的Settings.ini和 安装后手动复制它。我在想这种方式 ini文件仍然存在 RemoveFiles,它会被备份。 那么,ini文件确实存在,但是 它没有得到备份。

尝试创建一个卸载日志,看看MoveFiles执行时会发生什么。作为一个侧面说明,我没有看到安装后如何手动复制文件比备份自定义操作更好。

+0

Cosmin,谢谢你的回应。我可能误用了“备份”一词:它只意味着“创建该文件的副本”。我当然不打算在事后恢复它。我编辑了这篇文章,以解决误解。关于日志文件,我做了你的建议,并且MoveFile上没有任何事情发生。组件条件可能不正确? – Suiden 2011-03-07 09:12:09

+0

是的,我错过了。条件应该是REMOVE = " ALL "。否则,“ALL”字符串将被视为属性。处理属性时,所有字符串值应用引号括起来。 – 2011-03-07 09:28:05

+0

谢谢,很高兴知道这一点。不幸的是,它仍然没有做任何卸载。我想知道是否在卸载时评估组件条件...假设代码是正确的,可能不是。 – Suiden 2011-03-07 09:55:37