から/更新ドライバをインストールします。は、あなたが一般的にコマンドを送信し、ドライバをインストールするには、Windowsのサービス
DefaultInstall 128 {infファイルパス}ダイレクトコールまたはRUNDLL経由InstallHinfSectionへ
。
これはすばらしく機能します。私はどこにでも私のドライバをインストールすることができます(64ビットWin 2008 R2を含む、つまり、私はすべてのコード署名が正しいことを意味します)。
ただし、Windowsサービスから起動すると、上記は失敗します。私はサービスとクライアントのインストールについて読んだことがあり、サイレントサービスのインストール(.CATファイルの作成、ドライバとの署名など)のためのすべての要件を満たしていることを期待しました。
ダイスはありません。ただ失敗するだけです。対話型インストールとサービスからのインストールの間のSetupAPI.logのエラーを比較しても、違いはありません(対話型以外はドライバファイルをコピーし、成功した場合を除きます)。
ドライバ自体は使用されていません(私のサービスはそれを使用する唯一のサービスです)。ユーザーの操作を必要とせずに、サービスがドライバをサイレントに更新する方法はありますか?
我々はサービスから同じことを行うと、これはうまくいきます;これは、rundll32経由ではなくAPIを直接呼び出しています。 – Luke
本当ですか?rundll32を起動し、同じ結果をAPIに呼び出すことを試みました。うんざりですか?どんな種類のドライバがインストールされていますか? – DougN
実際には、両方の方法を使用しています。 32ビットマシンでは、APIを直接呼び出します。 64ビットマシンでは、rundll32(32ビットインストーラーがあります)を使用して呼び出します。これは、Vista以上のファイルシステムのミニフィルタ用です。 – Luke