要安装驱动程序,通常会发送命令:
DefaultInstall 128 {inf path}
通过直接调用或RunDLL安装到InstallHinfSection。
这非常有用。我可以在任何地方安装我的驱动程序(包括64位Win 2008 R2,这意味着我也可以正确签署所有代码)。
但是,从Windows服务启动时,上述操作失败。我已经阅读了有关服务与客户端安装的信息,并希望我已经满足了静默服务安装的所有要求(构建了.CAT文件,它与驱动程序一起签名等)。
但没有骰子 - 它只是失败了。比较交互式安装和服务安装之间的SetupAPI.log中的错误没有显示任何差异(除了交互式采取复制驱动程序文件和成功的步骤,而另一个没有)。
驱动程序本身未使用(我的服务是唯一使用它的服务)。有没有办法使服务无需用户交互即可静默更新驱动程序?
答案 0 :(得分:3)
我打电话给微软并与支持工程师讨论了这个问题。
事实证明,使用带有InstallHinfSection的DefaultInstall有点过时,但仍然有效。它恰好在没有提示用户的情况下工作,如果驱动程序由他们识别的证书签名,因为DefaultInstall是“哑”。然而,驱动程序本身仍然被允许启动,因为它与Microsoft证书交叉签名。我想是一个漂亮的小环孔。诀窍是它必须由设置为Interact with Desktop(一项要求)的服务安装。如果您的服务当前没有以这种方式运行,那么使用类似PsExec或RemCom的方法就是这样做的。
将来,这可能无法继续发挥作用。此时,将驱动程序的.cat文件放入Windows \ System32 \ Catroot {F7 ...文件夹中,但它不能直接复制到 - 有一个API。
如果首先放入.cat,那么驱动程序理论上不应该提示询问驱动程序的证书是否为用户所接受,因为catroot是“用户可接受的”证书列表和驱动程序。
此外,在尝试安装驱动程序之前安装目录文件可能有所帮助,因为目录包含驱动程序将提供的安全证书(虽然不一定在这种情况下 - 但它可能在将来有所帮助(可能还有Win) 2003)
基本上,支持工程师对此工作感到惊讶,我们四处寻找它的工作原理......希望这有助于其他人。