我要构造一个MSI,在安装过程中,它将自己和包含的文件/组件一起部署到TargetDir。
因此,MyApp.msi在其文件表中包含MyApp.exe和MyAppBootstrapperEmpty.exe(无资源)。
用户启动MyAppBootstrapperPackaged.exe(包含MyApp.msi作为资源,可以从Internet某处或通过电子邮件或其他方式获得)。 MyAppBootStrapperPackaged.exe将MyApp.msi提取到一个临时文件夹中,并通过msiexec.exe执行它。
msiexec.exe进程完成后,我需要MyApp.msi,MyBootstrapperEmpty.exe(和%ProgramFiles%\MyApp文件夹中的MyApp.exe,以便可以确保MyApp.exe在运行时可以访问MyApp.msi(用于创建以下内容-提及的打包内容)。
MyAppBootstrapper * .exe可以尝试将MyApp.msi复制到%ProgramFiles%\MyApp文件夹,但是需要这样做,并且不允许通过Windows Installer卸载过程(从“添加/删除程序”或其他方式)将其删除。应该保留。
显然(我认为这很明显-我错了吗?)我不能将MSI作为文件包含在我的Media/CAB中(鸡肉和鸡蛋方案),因此我认为必须在安装前通过“自定义操作”来完成流程中,将原始MSI即时添加到MSI DB的Media/CAB中,并在File表中添加相应的条目。可以做到吗?如果可以,怎么办?
考虑一个内容分发模型,在该模型中,内容文件只能与App一起分发。内容由最终用户在运行时通过App生成,并打包到一个可分发的EXE中,该EXE既包含App又包含内容。
MyApp的安装程序必须保持MSI,但可以由Bootstrapper EXE执行。安装后的MyApp.exe必须有权同时运行MyApp.msi和EXE,App才能在运行时从基础(空)MyAppBootstrapper.exe(由MSI安装)以及由MSI创建的内容“组装”到MyApp.msi和EXE。最终用户。 EXE的资源MSI必须与用于安装运行时打包的应用程序的MSI相同。
WIX不会与MyApp一起安装。
在运行/打包时没有网络依赖性(即不能通过Web服务进行打包-必须在本地完成)。
我熟悉(并使用)自定义 Action (通过DTF和其他方式进行托管和非托管)。
最佳答案
像这样向您的wxs添加未压缩的介质:
<Media Id='2'/>
然后使用以下File元素创建一个组件:
<File Source='/path/to/myinstaller.msi' Compressed='no' DiskId='2' />
这将使安装程序在安装介质上与要安装的msi相同的文件夹中查找名为“myinstaller.msi”的文件。上面的源路径应该指向一个虚拟文件,只有在这里才能安抚wix。
编辑:以下示例test.wxs演示了它的工作原理。它生成一个test.msi文件,该文件将自身安装到c:\program files\test。请注意,您需要将一个虚拟的test.msi文件放置在与text.wxs相同的文件夹中,以安抚wix。
<?xml version='1.0' encoding='utf-8'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product
Name='ProductName'
Id='*'
Language='1033'
Version='0.0.1'
Manufacturer='ManufacturerName' >
<Package
Keywords='Installer'
Description='Installer which installs itself'
Manufacturer='ManufactererName'
InstallerVersion='100'
Languages='1033'
Compressed='yes'
SummaryCodepage='1252'/>
<Media Id='1' Cabinet='test.cab' EmbedCab='yes'/>
<Media Id='2' />
<Directory Id='TARGETDIR' Name="SourceDir">
<Directory Id='ProgramFilesFolder'>
<Directory Id='TestFolder' Name='Test' >
<Component Id="InstallMyself">
<File Source="./test.msi" Compressed="no" DiskId="2" />
</Component>
</Directory>
</Directory>
</Directory>
<Feature
Id='Complete'
Display='expand'
Level='1'
Title='Copy msi file to program files folder'
Description='Test'>
<ComponentRef Id="InstallMyself" />
</Feature>
</Product>
</Wix>
关于wix - .msi文件可以自行安装(大概通过“自定义操作”)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/88078/