【问题标题】:How do I change ROOTDRIVE with a CustomAction?如何使用 CustomAction 更改 ROOTDRIVE?
【发布时间】:2011-11-21 16:23:24
【问题描述】:

通常,您可以更改默认根驱动器来安装您的应用程序以使用:

<Property Id="ROOTDRIVE">D:\</Property>

但是现在,我希望使用在我的安装向导中单击下一步按钮时调用的 CustomAction 来更改它:

[CustomAction]
public static ActionResult SetFullInstallRootDrive(Session session) {
    session["ROOTDRIVE"] = session["DRIVE_NAMES"].ToString();
}

DRIVE_NAMES 表示使用组合框选择的驱动器,ROOTDRIVE 被正确设置为我选择的任何本地驱动器(例如,C:\D:\)。但是,安装程序始终安装到最初在上述属性中设置的 D:\ 驱动器。发生了什么,如何在自定义操作中动态更改此属性的值,以便让用户选择根驱动器来安装我的 Web 应用程序?该属性确实被设置,但它不使用它,它几乎就像 ROOTDRIVE 属性只在安装向导开始时被评估一次。

【问题讨论】:

  • 我能够通过修改 TARGETDIR 而不是 ROOTDRIVE 来解决我自己的问题:未安装
  • msi 日志显示什么?可能是您尝试更新属性的值为时已晚,其中路径已被安装程序“修复”。为什么不允许更改完整的安装路径,通常存储在INSTALLDIR 属性中?

标签: c# installation wix windows-installer custom-action


【解决方案1】:

使用 3.5,我已经能够设置一个将安装在 E: 上的 MSI(如果可用),否则安装在 C: 上。我没有使用 VBS 或 C# 自定义操作,而是简单地将三行添加到 WIX。

<Property Id="ROOTDRIVE" Value="C:\">
  <DirectorySearch Id="Root_search" Path="E:\" Depth="1" />
</Property>

ROOTDRIVE 是其中一种特殊的、记录不充分的 WIX 属性。一旦你知道它的存在,它的功能就很明显了。它设置安装的根驱动器。使用 DirectorySearch 只需查看 E: 驱动器,如果可用,则“覆盖”初始“C:\”值。

您无需更改安装顺序或创建任何类型的自定义操作。

很简单,我想分享一下!

【讨论】:

    【解决方案2】:

    我能够通过修改 TARGETDIR 而不是 ROOTDRIVE 来解决我自己的问题:

    <InstallExecuteSequence>
      <Custom Action="FormatTargetDirectory" After="CostFinalize">NOT Installed</Custom> 
    </InstallExecuteSequence> 
    
    <CustomAction Directory="TARGETDIR" Value="[DRIVE_NAMES]" Id="FormatTargetDirectory"/>`
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2010-11-04
      • 2016-01-30
      • 1970-01-01
      相关资源
      最近更新 更多