WIX MSI - PROPERTY覆盖优先级

时间:2011-10-25 03:46:27

标签: wix windows-installer msiexec

非常感谢任何帮助。

我正在编写此WIX安装程序,以便让MSI在我们的服务器上安装Web应用程序。

在我的应用程序中,我有这个属性 - “WEBDIR”。我稍后在我的代码中将此属性用作目录标识。

我以3种方式设置了这个属性。

  1. (方法'A')作为在安静模式下调用msiexec时传递的属性。 [在此处将其设置为C:\ Path1]如下所示:

    msiexec /quiet /i My.msi WEBDIR="C:\Path1" /l*v InstallationLog.log
    
  2. (方法'B')来自IniFileSearch。我在C:\ Windows中有一个名为MySetup.ini的ini文件,其中关键WebsitesDir解析值C:\ Path2。 [在此处将其设置为C:\ Path2]:

    <Property Id="WEBDIR">
        <IniFileSearch Id="WebsitesDirIni" Name="MySetup.ini" Section="InstallLocations" Key="WebsitesDir" Type="raw"/>
    </Property>
    
  3. (方法'C')使用默认目录结构。 [在此设置为C:\ Path3]如下:

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="WEBDIR" Name="Path3">
        </Directory>
    </Directory>
    
  4. 目前的工作方式如下:   - 当方法'A','B'和'C'都设置属性值时,B优先。   - 当只有方法'A'和'C'设置属性值时,'C'优先。

    我想要的是能够将优先顺序设置为'A'。如果!'A'然后'B'否则'C'。

    这可能吗?

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。如果您想控制订单,最佳方法是immediate custom action。由于需要设置installer属性,因此自定义操作必须接收安装句柄(建议使用win32 DLL)。

在正常情况下,安装人员将使用此订单:

  1. 命令行值初始化属性
  2. 目录行设置初始文件夹路径,覆盖命令行值。以后可以通过成本核算操作(CostFinalize)来修改此路径。
  3. 搜索会覆盖初始文件夹路径,但可能会被成本核算操作覆盖。