我如何改变ROOTDRIVE与CustomAction

本文关键字:ROOTDRIVE CustomAction 改变 何改变 | 更新日期: 2023-09-27 18:15:23

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

<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属性只被评估一次,在安装向导开始时。

我如何改变ROOTDRIVE与CustomAction

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

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

ROOTDRIVE是那些特殊的、文档记录很差的WIX属性之一。一旦你知道它的存在,它的作用就很明显了。它设置安装的根驱动器。使用DirectorySearch只是查看E:驱动器,如果可用,"覆盖"初始的"C:'"值。

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

它很简单,我想分享它!

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

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