如何在UISequence之后防止目录的更改

时间:2014-10-16 14:17:39

标签: wix

我正在将我的产品与其他库链接,试图在多个安装中更容易安装一组目录。目的是重用xml代码,问题是它们必须按照客户要求安装在Root目录中。

所以我在WixLibrary中有ComponentGroup个。

我在Wix应用程序中设置了我的目录。

但是在安装之前CostFinalize之后,目录会重置为默认值,而不是我的用户在对话顺序期间选择的默认值。

有没有办法阻止这种情况?

1 个答案:

答案 0 :(得分:1)

好的,首先要做的事情是:

  • 问题是在CostFinalize和所有UI操作之后,我的目录被替换为默认值。
  • 当我链接两个使用相同全局目录的不同库时,问题就出现了。
  • 该文件夹设置在Windows的根文件夹(每个客户要求)中,然后设置为默认值。然后我们附加一个Property,就像我们为WIXUI_INSTALLDIR所做的那样,总体而言我们有以下内容:
    • 安装程序特定文件的一个root文件夹
    • 将文件安装到与directories目录无关的4 root的库。
    • 另一个安装文件并将脚本运行到这4个外部directory中的directories的库。这个库是我们安装的唯一特定。
  

链接所有这是它自己的问题,必须在ProductUI中,并使用外部库中指定的PropertyRef来完成。此外,请注意,每个PathEdit都必须设置为Indirect="yes",并且您必须设置指向Properties Directory的所有间接UI }

要解决问题非常简单,Microsoft Installer在用户在安装顺序中设置后重新检查我们的所有文件夹,因此我们需要在用户在{{1 }}。因此UI Sequence来救援。

以下是一个示例,在Properties中,您要为UI

中要设置的每个文件夹设置冻结文件夹
InstallUISequence

然后在<Property Id="SETFOLDERFREEZE">0</Property> <CustomAction Id="caSetPreventChanges" Property="SETFOLDERFREEZE" Value="1"/> 链接该属性。

Product

您在该项目的特定<PropertyRef Id="SETFOLDERFREEZE"/> <SetDirectory Id="SPECIFIC_FOLDER" Value="[WindowsVolume]MoreStuff" Sequence="both"> <![CDATA[SETFOLDERFREEZE<>"1"]]> </SetDirectory> <Property Id="EXTRAFILES_INSTALLDIR" Value="SPECIFIC_FOLDER"/> 中使用Property EXTRAFILES_INSTALLDIR,并在可重复使用的UI中使用SPECIFIC_FOLDER

一团糟......但允许重用,并设置一些简单的属性和自定义操作,重新设置文件和文件夹,特别是如果有数百个。