我正在为与硬件设备接口的软件应用程序创建安装程序。硬件设备使用FTDI USB 串行接口。我需要随软件一起安装FTDI USB 驱动程序(如果用户还没有),我正在使用WiX和DIFxApp 扩展来完成此操作。
到目前为止,一切都很好。这一切都很好。我为我的软件以及 32 位和 64 位版本的驱动程序提供了单独的 MSI 包,我正在使用Burn将它们全部捆绑到一个安装程序中。驱动程序 MSI 包将驱动程序文件部署到我的应用程序安装文件夹的子目录中,然后 DIFxApp 将驱动程序从那里安装到适当的系统位置。(这看起来很傻——它们只在安装过程中使用;为什么在那之后让它们一直闲逛?毕竟, 系统驱动程序存储中保存了一个副本。 最好将它们解压缩到一个临时文件夹,安装驱动程序,然后清理它们。但显然,这就是 DIFxApp 的工作方式。)
但是 FTDI 芯片组被许多不同的设备使用,用户很可能会拥有其他也需要 FTDI 驱动程序的设备。在测试中,我发现DIFxApp在卸载软件时会卸载驱动程序。这是不可取的,因为它会破坏用户拥有的任何其他基于 FTDI 的设备,要求用户重新安装驱动程序以使这些设备再次工作。
我希望 DIFxApp 在卸载我的软件时保留安装在用户系统上的驱动程序,以便删除我的软件不会影响用户的其他设备。
我可以通过设置或安装驱动程序的Permanent
属性来做到这一点,但这会阻止部署到我的应用程序安装文件夹子目录的驱动程序文件被清理。我希望那些连同我的申请一起被删除;我只是不希望从系统驱动程序存储等中删除驱动程序。MsiPackage
Component
看起来我可以通过使用DPInst 自定义操作安装驱动程序来完成我想要的。看起来 DPInst 方法将支持从临时文件夹安装驱动程序,并且不需要驱动程序文件永远挂在我的应用程序文件夹中。这似乎是务实的解决方案,但显然不鼓励 DPInst 在基于 MSI 的安装程序中支持 DIFxApp。
处理这个问题的“正确”方法是什么?