WiX:如何打包exe或dll以仅在安装期间使用
我需要在生成的MSI(通过WiX项目创建)中包含一个dll/exe,但我不想在安装期间部署它们:我只想在某些自定义操作中使用它们。我的目的是包含一个现有的exe/dll,并在安装期间从wxs代码(而不是从自定义操作dll)调用它。WiX:如何打包exe或dll以仅在安装期间使用,wix,wix3.5,wix3,wix3.6,wix3.7,Wix,Wix3.5,Wix3,Wix3.6,Wix3.7,我需要在生成的MSI(通过WiX项目创建)中包含一个dll/exe,但我不想在安装期间部署它们:我只想在某些自定义操作中使用它们。我的目的是包含一个现有的exe/dll,并在安装期间从wxs代码(而不是从自定义操作dll)调用它。 是否可以包含安装期间未部署的文件?我的意思是,只将它们打包到生成的MSI中,并在%temp%文件夹中解包时调用它们执行某些任务? 另外,如果有人能展示一些示例代码,说明如何通过Product.wxs XML代码单元包含dll/exe,那就太好了。 谢谢。如果使用C#/
是否可以包含安装期间未部署的文件?我的意思是,只将它们打包到生成的MSI中,并在%temp%文件夹中解包时调用它们执行某些任务?
另外,如果有人能展示一些示例代码,说明如何通过Product.wxs XML代码单元包含dll/exe,那就太好了。
谢谢。如果使用C#/DTF编写自定义操作,只需添加DLL作为引用。对于任何其他类型的文件,将它们作为内容添加到项目中| CopyAlways,生成将自动在自解压自定义操作中包含这些文件。当CA运行时,它们将在当前目录(临时目录)中可用,并在CA结束时自动清除。如果您使用C#/DTF编写自定义操作,只需添加DLL作为引用即可。对于任何其他类型的文件,将它们作为内容添加到项目中| CopyAlways,生成将自动在自解压自定义操作中包含这些文件。当CA运行时,它们将在当前目录(临时目录)中可用,并在CA结束时自动清除。是,使用元素包含它们
<Binary Id='MyCustomActionBinary'
SourceFile='$(var.CustomActionProject.TargetPath)' />
这将使您可以使用BinaryKey属性引用二进制文件:
<CustomAction Id='MyCustomAction'
BinaryKey='MyCustomActionBinary'
DllEntry='MyCustomFunction'
Execute='deferred' />
是,使用元素包含它们
<Binary Id='MyCustomActionBinary'
SourceFile='$(var.CustomActionProject.TargetPath)' />
这将使您可以使用BinaryKey属性引用二进制文件:
<CustomAction Id='MyCustomAction'
BinaryKey='MyCustomActionBinary'
DllEntry='MyCustomFunction'
Execute='deferred' />
您计划用什么语言编写自定义操作?自定义操作是用C#编写的。您计划用什么语言编写自定义操作?自定义操作是用C#编写的。抱歉,可能我不够清楚:我不想将它们包含在CustomAction.CA.dll中,我希望它们通过Product.wxs代码包含。为什么?要意识到,如果你这样做的话,你将不得不彻底改造所有的基础设施。如果您正在调用EXE,则可能应该使用QuietExecCA。如果您正在调用DLL,可能应该将其添加为引用。否则,您必须编写从二进制表提取的所有代码,使用反射来调用它,然后进行清理。我必须有一个非常非常有说服力的理由来做这一切,而不是利用内置功能。好的,我明白了,那么我就不会从自定义操作调用外部exe/dll。我将只从wxs代码调用它们。无论如何,谢谢你的回答,它为我澄清了很多事情:)可悲的是,它可能有点复杂。您计划调用的EXE是否具有DLL依赖项?如果是这样,您想从临时目录调用它们而不安装它们吗?如果是这样的话,那就复杂一点。如果这是你的故事,请告诉我。不,我要调用的exe只是一个命令行实用程序,它没有依赖项。抱歉,也许我不够清楚:我不想在CustomAction.CA.dll中包含这些,我想通过Product.wxs代码包含它们。为什么?要意识到,如果你这样做的话,你将不得不彻底改造所有的基础设施。如果您正在调用EXE,则可能应该使用QuietExecCA。如果您正在调用DLL,可能应该将其添加为引用。否则,您必须编写从二进制表提取的所有代码,使用反射来调用它,然后进行清理。我必须有一个非常非常有说服力的理由来做这一切,而不是利用内置功能。好的,我明白了,那么我就不会从自定义操作调用外部exe/dll。我将只从wxs代码调用它们。无论如何,谢谢你的回答,它为我澄清了很多事情:)可悲的是,它可能有点复杂。您计划调用的EXE是否具有DLL依赖项?如果是这样,您想从临时目录调用它们而不安装它们吗?如果是这样的话,那就复杂一点。如果这是你的故事,请告诉我。不,我要调用的exe只是一个命令行实用程序,它没有依赖项。当然,你可以。但是,使blob可用、调用和清理的基础设施是相当可观的。C#/DTF允许您将所有这些封装在自定义操作中以简化故事。事实上,这正是我想要的,也许我不是很清楚:我的目的是包含一个现有的exe/dll,并在安装期间从wxs代码(而不是从自定义操作dll)调用它@ChristopherPaint我目前正在处理一个项目,其中我的project.exe文件具有多个依赖项…从哪里可以获得有关在WiX引导程序中包含project.exe的项目依赖项的更多信息?我为我的项目引用了ExePackage
,但它不包括它的依赖项。我们是否要使用多个dll?当然可以。但是,使blob可用、调用和清理的基础设施是相当可观的。C#/DTF允许您将所有这些封装在自定义操作中以简化故事。事实上,这正是我想要的,也许我不是很清楚:我的目的是包含一个现有的exe/dll,并在安装期间从wxs代码(而不是从自定义操作dll)调用它@ChristopherPaint我目前正在处理一个项目,其中我的project.exe文件具有多个依赖项…从哪里可以获得有关在WiX引导程序中包含project.exe的项目依赖项的更多信息?我为我的项目引用了ExePackage
,但它不包括它的依赖项。我们要使用多个dll吗?