将绝对路径传递到WiX中的自定义操作

时间:2017-03-29 09:46:16

标签: wix wix3.5

我正在使用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 \安装\ 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]" />

请注意,为了将变量传递给延迟的自定义操作,我需要使用该语法,这里将对此进行说明 - &gt; 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 \安装\ MSI971.tmp-C:\ ProgramData \ myCompany中\ myProgram \

1 个答案:

答案 0 :(得分:1)

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