将绝对路径传递给 WiX 中的自定义操作
Passing an absolute path to a custom action in WiX
我正在使用 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\
大多数情况下,您的安装程序会被缓存,因此是临时文件夹。您可以改为连接完整路径:<...Value="DbFilePath=[CommonAppDataFolder]\myCompany\myProgram" />
.
我正在使用 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\
大多数情况下,您的安装程序会被缓存,因此是临时文件夹。您可以改为连接完整路径:<...Value="DbFilePath=[CommonAppDataFolder]\myCompany\myProgram" />
.