我有一个wix项目,我添加了一个自定义窗口,用于检查运行应用程序所需的依赖项。此窗口在许可协议之后立即出现。一切正常,通过自定义操作检查依赖项,如果不满足,如果Windows安装程序高于版本5,则会显示指向官方网站的超链接。
如果版本较低,我想点击btn“显示依赖项”并显示包含链接的txt文件。我在打开记事本和包含该文件的属性下面有自定义操作。
代码:
<Property Id="FXDEP" Value="$(sys.CURRENTDIR)\Resources\Files\FxDependencies.txt" />
<Property Id='NOTEPAD'>NOTEPAD.EXE</Property>
<CustomAction Id='LaunchDependencies' Property='NOTEPAD' ExeCommand='[FXDEP]' Return='asyncNoWait' />
问题在于它在开发机器上工作,因为它找到了路径,但在其他方面它失败了。 我该如何告诉wix维护这个文件并打开它?
我尝试将文件放入
<Binary Id="FxDependencies.txt" SourceFile="$(sys.CURRENTDIR)\Resources\Files\FxDependencies.txt" />
但自定义操作无法识别它。
答案 0 :(得分:3)
您似乎正在尝试打开驻留在安装源中的文件。您对FxDependencies.txt
和FXDEP
使用相同的值。
您的带有依赖项的文本文件位于安装程序的Binary
表中,要使用它,您必须将其解压缩到一个临时目录中,然后启动记事本以显示它。
要做到这一点,您必须编写几个自定义操作:
FXDEPTEMPPATH
。FXDEPTEMPPATH
在记事本中显示它。另一种选择是在资源中编写一个包含FxDependencies.txt
的小应用程序(.exe)。您将此.exe添加到MSI的二进制表中,然后从安装程序启动它而不是记事本。在这种情况下,MSI会自动将exe解压缩到一个临时目录中并启动它。在应用程序中,通过从资源中提取信息,在临时目录中创建一个新的文本文件,然后启动记事本以显示它。
编辑: 从二进制表中读取文件的方法有很多种。请参阅以下链接以获取示例:
BinaryWrite
的MsiGetActiveDatabase
和MsiDatabaseOpenView
; MsiRecordReadStream
读取二进制流。答案 1 :(得分:0)
我建议你在自定义操作中创建文件夹。 所以,
$(sys.CURRENTDIR)\Resources\Files\
)