WIX MSI - 属性覆盖优先级

发布于 2024-12-11 20:55:45 字数 990 浏览 0 评论 0原文

任何帮助将不胜感激。

我编写此 WIX 安装程序是为了获取 MSI 以在我们的服务器上安装 Web 应用程序。

在我的应用程序中,我有这个属性 - “WEBDIR”。稍后我会在代码中使用此属性作为目录 ID。

我通过三种方式设置这个属性。

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

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

    <属性 ID="WEBDIR">
        
    
    
  3. (方法 'C') 使用默认目录结构。 【此处设置为C:\Path3】如下:

    <目录 Id="TARGETDIR" Name="SourceDir">
        <目录 ID="WEBDIR" 名称="Path3">
        
    
    

目前的工作方式如下: - 当方法“A”、“B”和“C”都设置属性值时,B 优先。 - 当仅方法“A”和“C”设置属性值时,“C”优先。

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

这可能吗?

Any help will be much appreciated.

I'm writing this WIX installer to get an MSI to install a web app on our servers.

Within my app, I have this PROPERTY - "WEBDIR". I use this property later in my code as a Directory Id.

I set this property in 3 ways.

  1. (Method 'A') As a property passed when you call msiexec in quiet mode. [Setting it here as C:\Path1] Like so:

    msiexec /quiet /i My.msi WEBDIR="C:\Path1" /l*v InstallationLog.log
    
  2. (Method 'B') From an IniFileSearch. I have an ini file in C:\Windows called MySetup.ini where the key WebsitesDir resolves the value C:\Path2. [Setting it here as C:\Path2]:

    <Property Id="WEBDIR">
        <IniFileSearch Id="WebsitesDirIni" Name="MySetup.ini" Section="InstallLocations" Key="WebsitesDir" Type="raw"/>
    </Property>
    
  3. (Method 'C') Using a default directory structure. [Setting it here as C:\Path3] As follows:

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="WEBDIR" Name="Path3">
        </Directory>
    </Directory>
    

The way it currently works is as follows:
- When Methods 'A', 'B' and 'C' all set the property value, B takes precedence.
- When only Methods 'A' and 'C' set the property value, 'C' takes precedence.

What I want is to be able to set the order of precedence to 'A'. If !'A' then 'B' else 'C'.

Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一身仙ぐ女味 2024-12-18 20:55:45

不,这是不可能的。如果您想控制顺序,最好的方法是立即自定义操作。由于它需要设置安装程序属性,因此您的自定义操作必须接收安装句柄(建议使用 win32 DLL)。

通常情况下,安装程序将使用以下顺序:

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

No, this is not possible. If you want to control the order the best approach would be an immediate custom action. Since it needs to set an installer property, your custom action must receive the installation handle (a win32 DLL is recommended).

Under normal circumstances the installer will use this order:

  1. A command line value initializes the property
  2. A directory row sets the initial folder path, overriding the command line value. This path can be later modified by costing actions (CostFinalize).
  3. A search overrides the initial folder path, but may be overridden by costing actions.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文