Wix:是否可以从自定义操作中手动运行RemoveFolderEx元素?

Nei*_*eil 5 windows-installer wix

我想知道是否可以从自定义操作手动运行RemoveFolderEx元素.我猜可能不是,但有人可能知道一种我不知道的方式.

我的问题是我想运行RemoveFolderEx元素,但只在真正的UNINSTALL上,但是我的程序在升级时执行它,因为我在重新安装之前将其设置为uninstall.

我尝试通过这个方法 Wix:条件属性不工作, 但它不起作用,仍然运行时重新安装.

我唯一能想到的是能够从自定义操作中手动设置RemoveFolderEx,我知道我在正确的点运行并且仅在真正的卸载时运行.也许我的自定义操作可以使用c ++ dll,然后手动将命令添加到MSI接口,但如果我走得那么远,那么自己也可以完全编写删除逻辑.

谢谢.尼尔


编辑:我终于得到了这个工作,这是一个示例wix来显示我做了什么.

<Property Id='P.REMOVEDATAFOLDER' Secure='yes' />

<DirectoryRef Id="DATADIR">        
    <Component Id="C.RemoveDataFolder" Guid="myguid" KeyPath="yes">
        <util:RemoveFolderEx On="uninstall" Property="P.REMOVEDATAFOLDER" />
    </Component>
</DirectoryRef>

<CustomAction Id="CA.SetDataFolder" Property="P.REMOVEDATAFOLDER" Value='[DATADIR]' />

<InstallExecuteSequence>           
    <Custom Action="CA.SetDataFolder" Before="ValidateProductID" >(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
</InstallExecuteSequence>    
Run Code Online (Sandbox Code Playgroud)

在从注册表中读取DATADIR但在CostInitialize操作之前,属性P.REMOVEDATAFOLDER 在真正的卸载时设置.

Cip*_*ian 5

我会使用以下方法.不要调整RemoveFolderEx操作,但使用条件自定义操作为目标属性设置适当的值.

  • 请注意,此方法仅有效,因为 RemoveFolderEx 自定义操作足够智能,不会处理没有值的属性。事实上,开发过程中的一个错误删除了我测试虚拟机上 system32 目录中的一堆文件。这就是为什么我添加了跳过空属性的代码。:) 这不是您通常可以依赖的东西;例如,如果未提供有效值,MSI 中的许多内容将失败。 (3认同)