我将使用WiX创建我的应用程序的安装程序。
我有一个片段描述了我的应用程序的目标安装文件夹:
```xml
我还有一个自定义操作需要以
我期望得到的路径是:
编辑:
下面是我如何将
请注意,在将变量传递给延迟自定义操作时,我需要使用以下语法。这里有解释-> 如何将参数传递给自定义操作? 以下是接收参数的 C# 部分:
我有一个片段描述了我的应用程序的目标安装文件夹:
```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\
看起来WiX添加了某种临时文件夹。C:\Windows\Installer\MSI971.tmp-C:\ProgramData\myCompany\myProgram\
编辑:
下面是我如何将
[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\
msiexec -i yourinstaller.msi -l*v logname.txt
。然后查找属性App
被分配的日志行。我猜它最初是用值C:\ProgramData\myCompany\myProgram\
创建的,但在您的自定义操作运行之前和之后将被覆盖为错误的值。 - zett42