基本上,我正在尝试构建一个 WIX msi,它可以运行 devcon.exe(Windows 硬件管理器的命令行版本)来检测是否安装了特定的硬件。如果是,则安装msi A,否则安装msi B(A和B已作为单独的msi包存在,我们需要根据硬件自动选择性安装)。
目前我已经安装了 WIX SDK 并创建了一个正确构建 msi 的 WIX 项目。我可以做一些简单的事情,比如执行 CustomActions 来打开 notepad.exe,那种简单的事情。
第一个问题:我无法找出如何将文件打包到不会安装到目录中的安装程序中。我找到了对它的引用,但没有明确说明如何做到这一点。我不必将它放在“目录”标签中,如果它不会安装到主机驱动器上,对吧?
第二个问题:devcon.exe 没有(据我所知,如果我错了,请纠正我)似乎根据它发现的内容改变它的返回值,可能是因为它做了很多事情并且不限于是否硬件设备是否存在。因此,如果我可以将其嵌入并使其运行,那么我需要以某种方式将其输出到标准输出流中,然后将其解析为我正在寻找的特定值。
当然这会更容易一些,因为我已经有一个批处理文件可以进行解析并设置一个环境变量,它会告诉我我需要知道什么,但是,如果我可以将它们都嵌入,我怎么得到批处理文件来引用嵌入式 devcon.exe,然后让 WIX 读取变量,或者我可以在 WIX 中设置一个(或属性),然后从批处理文件中设置它?
也许我应该创建一个 dll 自定义操作?是否可以从 dll 自定义操作运行嵌入式可执行文件?然后我可以运行 devcon.exe,并在那里进行所有解析,然后只需设置一个 Wix 变量或属性来选择下一步做什么。
第三个问题:能够从另一个运行一个 msi。我还不太了解,但我发现(http://softwareinstall.blogspot.com/2008/06/fun-with-msiembeddedchainer.html)看起来很有希望,虽然我还没有通读然而。一次一个问题,我当然已经受够了:)