在WiX中向自定义操作传递绝对路径

5
我将使用WiX创建我的应用程序的安装程序。
我有一个片段描述了我的应用程序的目标安装文件夹:
```xml

I'm using WiX to create an installer for my application

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

```
  <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]" />

请注意,在将变量传递给延迟自定义操作时,我需要使用以下语法。这里有解释-> 如何将参数传递给自定义操作? 以下是接收参数的 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]传递给自定义操作的语法? - Azaz ul Haq
@AzazulHaq,请看一下我刚刚做的修改。 - Gianluca Ghettini
请问您能否创建一个详细的MSI日志?msiexec -i yourinstaller.msi -l*v logname.txt。然后查找属性App被分配的日志行。我猜它最初是用值C:\ProgramData\myCompany\myProgram\创建的,但在您的自定义操作运行之前和之后将被覆盖为错误的值。 - zett42
1个回答

2
大多数情况下,您的安装程序会被缓存到临时文件夹中。您可以使用以下完整路径:<...Value="DbFilePath=[CommonAppDataFolder]\myCompany\myProgram" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接