|
1
9
向WXS添加未压缩介质,如下所示:
然后用这样的文件元素创建一个组件:
这将使安装程序在安装介质上查找名为“myinstaller.msi”的文件,该文件与正在安装的msi位于同一文件夹中。上面的源路径应该指向一个虚拟文件,它只是为了安抚wix。 编辑 :下面的示例test.wxs演示了它的工作原理。它生成一个test.msi文件,将自己安装到c:\program files\test。请注意,您需要将一个虚拟test.msi文件放在与text.wxs相同的文件夹中,以安抚wix。
|
|
|
2
3
让一个.msi包从“内部”启动另一个.msi包称为 嵌套安装 和它的 bad juju (见规则20)。Windows Installer有一些用于管理当前安装的全局数据,但它不能同时处理好多个安装。出于同样的原因,如果您启动一个安装,然后在第一个安装仍在进行时尝试启动另一个安装,您通常会看到一个弹出窗口,显示“另一个安装正在进行,请等待安装完成”。
您可以有一个程序,通常称为引导程序(我认为这就是您所指的),它本身不是一个安装包,而是
包含
作为资源的安装包(如.msi或.exe),可能已压缩。引导程序的操作是将资源提取/扩展到一个文件,通常在
Wix本身没有安装,不。它是一个可以用它构建.msi包的工具。wix项目有一个通用的引导程序,但还没有实现。还有其他引导程序可用,例如 this one . 您不需要自定义操作——事实上,因为引导程序本身不是Windows Installer安装包,“自定义操作”对它没有意义。而且,如果您对CA足够熟悉,能够了解托管/非托管/DTF,那么您就可以随时避免自定义操作。(咧嘴) |
|
|
3
2
我认为引导程序更容易将MSI文件提取到某个预先定义的位置,而不是提取到temp文件夹。例如,到c:\documents and settings\all users\application data\my company\my product install cache。安装完成后,引导程序会将msi文件留在那里。如果在某个阶段,用户决定重新安装产品,Windows安装程序将能够找到源MSI文件。 另外,将此文件的路径添加到 RemoveFile table 以便在卸载时将其删除。你可以使用 RemoveFile element 在Wix中。 |
|
|
4
1
所以如果我理解,那么我想我应该让应用程序创建一个包含内容文件的转换(MST),并将其应用到基本的MSI。但我仍然不相信我能理解。:) |
|
|
5
0
我将配置到已知位置的msi缓存路径。 然后在运行时,如果需要“编辑”MSI,请使用vbscript或类似工具。 但是,我还是问为什么!?! |
|
|
6
0
我还在研究部署多个MSI文件的方法。我有一个bootstrapper.exe程序,它捆绑MSI文件并一次运行一个。这解决了我大多数情况下的问题。 它不能解决的情况是安装的GPO(全局策略对象)分发。GPO需要一个点msi文件来运行安装。 要做到这一点,我所做的几乎解决了问题(但不是完全解决)。我把dot-msi文件放在安装程序的文件表中,把引导程序放在二进制表中,从installFinalize之后插入的自定义操作运行它。当然,引导程序将无法运行其他的msi,因为顶级msi保存了\msiexecute mutex。 再往前走一点很容易。我让引导程序返回控制到顶层安装程序并继续。然后我添加了一个waitforsingleobject调用来等待顶级安装完成,引导程序随后可以继续完成安装。 我的问题是,GPO安装发生在启动时,顶级安装在子安装程序完成和GPO重新启动计算机之前完成。 当安装稍后可能实际失败时,顶级安装还会返回成功状态。 我仍在寻找一种方法来阻止顶级安装完成,直到引导程序完成。 |