我正在为与硬件设备连接的软件应用程序创建安装程序。硬件设备使用FTDI USB serial interface。我需要安装FTDI USB drivers(如果用户还没有)以及软件,我正在使用WiX和DIFxApp extension来完成此任务。
到目前为止,这么好。一切正常。我为我的软件和32位和64位驱动程序提供了单独的MSI软件包,我正在使用Burn将它们捆绑到一个安装程序中。驱动程序MSI包将驱动程序文件部署到我的应用程序安装文件夹的子目录中,然后DIFxApp将驱动程序从那里安装到相应的系统位置。 (这看起来很愚蠢 - 它们只在安装期间使用;为什么要在它们之后保持闲置?A copy is kept in the system driver store, after all.最好将它们提取到临时文件夹,安装驱动程序,然后清理它们。但显然,that’s the way DIFxApp works。)
但FTDI芯片组被许多不同的设备使用,用户可能拥有其他需要FTDI驱动程序的设备。在测试中,我发现DIFxApp在卸载软件时卸载了驱动程序。这是不可取的,因为它会破坏用户拥有的任何其他基于FTDI的设备,要求用户重新安装驱动程序以使这些设备再次工作。
我希望DIFxApp在卸载我的软件时将驱动程序保留在用户的系统上,以便删除我的软件不会影响用户的其他设备。
我可以通过在安装驱动程序的MsiPackage
或Component
上设置Permanent
属性来执行此操作,但这会阻止驱动程序文件部署到我的应用程序安装文件夹的子目录中进行清理。我希望那些与我的应用程序一起删除;我只是不希望从系统驱动程序商店中删除驱动程序等。
看起来我可以通过使用DPInst custom action安装驱动程序来完成我想要的工作。看起来DPInst方法似乎支持从临时文件夹安装驱动程序,并且不需要驱动程序文件在我的应用程序文件夹中永久存在。这似乎是务实的解决方案,但显然DPInst is discouraged in favor of DIFxApp in MSI-based installers。
处理此问题的“正确”方法是什么?