(使用 installshield 2013)
我有一个安装软件的安装程序,现在我正在向安装程序添加一个全新的 shinny 设备驱动程序。需要注意的是它(驱动程序)只能安装在 32 位 windows 7 机器上,我们也想利用即插即用的优势,所以它应该在安装后准备就绪。但是考虑到这一点,将软件安装在 Win7-64 位机器上是非常好的。这不是公司外部“官方”支持的场景,但对于内部开发人员来说是必要的。
所以我所做的是添加我的组件并将其标记为 32 位驱动程序。如果我尝试在我的笔记本电脑(win7 64bit)上安装,我会得到 ERROR - You need to use the 64-bit version of DIFXAPP.DLL to install drivers on this machine.
Drat!一位同事建议我在VersionNT >= 601 AND NOT VersionNT64
上使用以下条件MSIProcessDriver
,这些相同的条件似乎不适用于组件本身,我被告知在这些条件工作的过程中为时已晚。我还必须将这些相同的条件添加到MSICleanUpOnSuccess
获得升级以在我的笔记本电脑上工作。我不知道这是否是正确的解决方案,但它对我有用,我可以安装和升级。这就是我的麻烦开始的地方,在实际的硬件平台本身上,我能够安装一次,但我无法升级或安装任何不同版本的安装程序,应用程序本身安装正常,但安装程序总是返回“中断” . 我得到以下
DIFXAPP: ERROR 0x65A creating MsiUninstallDrivers custom action for Win7Drivers
DIFXAPP: RETURN: ProcessDriverPackages() 1626 (0x65A)
CustomAction MsiProcessDrivers returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
Action ended 15:04:33: MsiProcessDrivers. Return value 3.
MSI (s) (B8:58) [15:04:33:419]: Machine policy value 'DisableRollback' is 0
MSI (s) (B8:58) [15:04:33:419]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (B8:58) [15:04:33:419]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (B8:58) [15:04:33:419]: Calling SRSetRestorePoint API. dwRestorePtType: 13, dwEventType: 103, llSequenceNumber: 29, szDescription: "".
MSI (s) (B8:58) [15:04:33:419]: The call to SRSetRestorePoint API succeeded. Returned status: 0.
MSI (s) (B8:58) [15:04:33:419]: Unlocking Server
Action ended 15:04:33: INSTALL. Return value 3.
从我在网上收集的信息来看,这可能是由于安装不当导致该驱动程序的注册表处于错误状态。我已经看到其他人遇到了这个问题,但没有发布任何解决方案。我也不知道该做什么,或者如何让我的测试机器恢复工作状态。我希望你们可以提供帮助,或分享您发现可行的类似场景的策略。
ps 我还尝试将此作为一个单独的功能,并将其标记required
为NO
,认为如果它失败(比如在我的笔记本电脑上),这不应该使整个安装程序失败。我不确定如果驱动程序无法安装在我们的硬件平台上,我们的预期行为会是什么,我想失败了?