2011-10-31 1 views
2

から/更新ドライバをインストールします。は、あなたが一般的にコマンドを送信し、ドライバをインストールするには、Windowsのサービス

DefaultInstall 128 {infファイルパス}ダイレクトコールまたはRUNDLL経由InstallHinfSectionへ

これはすばらしく機能します。私はどこにでも私のドライバをインストールすることができます(64ビットWin 2008 R2を含む、つまり、私はすべてのコード署名が正しいことを意味します)。

ただし、Windowsサービスから起動すると、上記は失敗します。私はサービスとクライアントのインストールについて読んだことがあり、サイレントサービスのインストール(.CATファイルの作成、ドライバとの署名など​​)のためのすべての要件を満たしていることを期待しました。

ダイスはありません。ただ失敗するだけです。対話型インストールとサービスからのインストールの間のSetupAPI.logのエラーを比較しても、違いはありません(対話型以外はドライバファイルをコピーし、成功した場合を除きます)。

ドライバ自体は使用されていません(私のサービスはそれを使用する唯一のサービスです)。ユーザーの操作を必要とせずに、サービスがドライバをサイレントに更新する方法はありますか?

+0

我々はサービスから同じことを行うと、これはうまくいきます;これは、rundll32経由ではなくAPIを直接呼び出しています。 – Luke

+0

本当ですか?rundll32を起動し、同じ結果をAPIに呼び出すことを試みました。うんざりですか?どんな種類のドライバがインストールされていますか? – DougN

+0

実際には、両方の方法を使用しています。 32ビットマシンでは、APIを直接呼び出します。 64ビットマシンでは、rundll32(32ビットインストーラーがあります)を使用して呼び出します。これは、Vista以上のファイルシステムのミニフィルタ用です。 – Luke

答えて

2

私はマイクロソフトと呼ばれ、サポートエンジニアとこれについて話し合った。

InstallHinfSectionでDefaultInstallを使用するといくらか廃止されましたが、まだ動作しています。 DefaultInstallが 'ダム(dumb)'なので、ドライバが認識した証明書で署名されているかどうかをユーザーに確認せずに動作します。それでも、ドライバ自体はMicrosoft certと相互署名されているため、起動することができます。私が推測するような素敵なループホール。そのトリックは、デスクトップとのインタラクト(要件)に設定されているサービスによってインストールされなければならないということです。 PsExecやRemComのようなものを使うことは、あなたのサービスが現在そのように動作していない場合にこれを行う方法です。

今後これは機能しない可能性があります。その時点で、ドライバの.catファイルをWindows \ System32 \ Catroot {F7 ...フォルダに入れてください。ただし、直接コピーすることはできません。APIがあります。

最初に.catが入力された場合、ドライバは理論的にドライバの証明書がユーザーに受け入れられるかどうかを確認する必要はありません。なぜなら、catrootはcertsとドライバ。

また、ドライバーのインストールを試みる前にカタログファイルをインストールすると、ドライバーが提示するセキュリティー証明書がカタログに含まれている場合があります(ただし、必ずしもそうである必要はありませんが、ウィン2003)基本的にサポートエンジニアが、これがすべてで働いていたし、我々はそれが働く可能性がありますどのように周りと回っ驚いた

...うまくいけば、これは他の誰かに役立ちます。

関連する問題