【问题标题】:Passing an absolute path to a custom action in WiX将绝对路径传递给 WiX 中的自定义操作
【发布时间】:2017-03-29 09:46:16
【问题描述】:

我正在使用 WiX 为我的应用程序创建安装程序

我有这个片段,它描述了我的应用程序的目标安装文件夹:

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="CommonAppDataFolder">
        <Directory Id="Company" Name="myCompany">
          <Directory Id="App" Name="myProgram">
            <Directory Id="SQLGENERATORINSTALLFOLDER" Name="SqlLiteFolder" />
          </Directory>          
        </Directory>
      </Directory>
    </Directory>
  </Fragment>

我还有一个自定义操作,它需要 [App] 文件夹作为输入参数。如果我将 [App] 传递给自定义操作,我希望文件夹的整个路径,从 C:\ 一直到内部文件夹

我希望这样:

C:\ProgramData\myCompany\myProgram\

相反,我得到了这个:

C:\Windows\Installer\MSI971.tmp-C:\ProgramData\myCompany\myProgram\

看起来 WiX 正在附加某种临时文件夹

编辑

这就是我将[App] 变量传递给自定义操作的方式:

  <CustomAction Id='GrantAccessToDatabase' BinaryKey='ActionLib' DllEntry='GrantAccess' Execute='deferred' Impersonate='no' />
  <Property Id="GrantAccessToDatabase" Value="DbFilePath=[App]" />

请注意,为了将变量传递给延迟的自定义操作,我需要使用该语法,此处对此进行了解释 -> How to pass parameters to the custom action?

这是接收参数的C#部分:

[CustomAction]
public static ActionResult GrantAccess(Session session)
{
     var data = session.CustomActionData;
     var fullPath = data["DbFilePath"];
}

我希望fullPath 是:

C:\ProgramData\myCompany\myProgram\

相反,我得到:

C:\Windows\Installer\MSI971.tmp-C:\ProgramData\myCompany\myProgram\

【问题讨论】:

  • 请分享您如何将 [App] 传递给自定义操作的语法?
  • @AzazulHaq 请看一下我刚刚所做的编辑
  • 能否请您创建一个详细的 MSI 日志? msiexec -i yourinstaller.msi -l*v logname.txt。然后查找分配了属性App 的日志行。我猜它最初是使用值“C:\ProgramData\myCompany\myProgram”创建的,但在此之后和您的自定义操作运行之前会被错误的值覆盖。

标签: wix wix3.5


【解决方案1】:

大多数情况下,您的安装程序会被缓存,因此是临时文件夹。您可以改为连接完整路径:&lt;...Value="DbFilePath=[CommonAppDataFolder]\myCompany\myProgram" /&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多