为什么我在WIX管理的自定义操作中获得SourceDir的空白值

本文关键字:SourceDir 空白 自定义 WIX 管理 为什么 操作 | 更新日期: 2023-09-27 18:04:25

这是Product的代码。为什么我使用:

<Product Id="*" Name="abc" Language="1033" Version="1.0.0.0" Manufacturer="def" UpgradeCode="2b75c560-783e-4688-9a02-da09bf986597">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />
    <Binary Id="myCustomActionsDLL" SourceFile="..'SetupConfiguration'bin'debug'SetupConfiguration.CA.dll" />
    <CustomAction Id="SetProperty" Execute="immediate"
                        Property="CA_myCustomAction"
                        Value="InstallDir=[MergeRedirectFolder];SourceDir=[SourceDir]" />
    <CustomAction Id="CA_myCustomAction"
        BinaryKey="myCustomActionsDLL"
        DllEntry="SetABCConfiguration"
        Execute="deferred" Impersonate="no"
        Return="check" />
    <InstallExecuteSequence>
      <Custom Action="SetProperty" After="InstallInitialize">Not Installed</Custom>
      <Custom Action="CA_myCustomAction" Before="InstallFinalize">Not Installed</Custom>
    </InstallExecuteSequence>
    <Feature Id="ProductFeature" Title="abc" Level="1">
      <ComponentGroupRef Id="ABCGroup" />
    </Feature>
  </Product>
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="def" Name="def">
          <Directory Id="dirFC83E07AC2C77525961486C88A01C277" Name="ABC">
            <Directory Id="MergeRedirectFolder"/>
          </Directory>
          </Directory>
      </Directory>
    </Directory>
  </Fragment>
[CustomAction]
public static ActionResult SetABCConfiguration(Session session)
{
    string strSourceFolder = session.CustomActionData["SourceDir"]; // returning blank value
    string strWebGeniePhyPath = session.CustomActionData["InstallDir"]; // returning correct value
}

我故意省略了组件ABCGroup的代码,它只包含一个热量收集目录,这是一个长列表。

请帮。

为什么我在WIX管理的自定义操作中获得SourceDir的空白值

SourceDir属性是由ResolveSource Action设置的。WiX默认不生成ResolveSource动作,您必须使用ResolveSource元素将其添加到序列中。

我自己通过尝试找到了解决方案:

只需更改以下行:

  <Custom Action="SetProperty" After="InstallInitialize">Not Installed</Custom>

到这行:

  <Custom Action="SetProperty" After="CreateFolders">Not Installed</Custom>

并且成功了

我不知道为什么这个变化的工作,因为有问题的代码是工作时,它是在一个合并模块,而不是在主Product.wxs文件。