Archived: Measurement Studio .NETアセンブリが実行時のロードに10秒以上かかる

This document has been archived and is no longer updated by National Instruments



使用ソフトウェア:
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: Measurement Studio>>Standard Edition (Starter Kit)

問題:
Measurement Studio .NETクラスライブラリを使用すると、アプリケーションのロードに10秒以上時間がかかります。プロジェクトからMeasurement Studioのアセンブリを削除するとロード時間が短くなります。何が原因ですか?また、どうすれば修正できますか?


解決策:

メモ: Measurement Studio 8.1より、Measurement Studioアセンブリはauthenticode署名(デジタル署名)ではなくなります。このページで説明されている問題は、Measurement Studio 8.1以降を使用して開発/配布されたアプリケーションでは解消されています。まだAuthenticode署名のMeasurement Studioアセンブリを要求する場合は、NI技術サポートまでご連絡ください。

 

この動作はAuthenticode署名であるどの.NET 1.1および2.0アセンブリでも発生し、Measurement Studioも例外ではありません。デジタル署名はコードサイニング(Code Signing)とも呼ばれ、マイクロソフトは .NETライブラリに署名することを強く推奨しています。弊社ではMeasurement Studio の ActiveX や.NETコンポーネントに署名済みです。

アセンブリに署名することで、コンポーネントの改ざんを防ぎ、ユーザがコンポーネント発行者の証明を知ることができるようになります。

この問題は、署名のある.NETアセンブリを確認するために.NET共通言語ランタイム(CLR:Common Language Run-time)によって使用されたメカニズムによるものです。検証プロセスの一部では、ライブラリの証明書が廃止されたり期限切れになっていないかチェックするためにオンライン検索します。Windowsでは、この作業をCRL(Certificate Revocation List)をダウンロードすることで実行します。署名されたアセンブリを.NET CLRが最初にロードするとき、CRLが証明書発行元からダウンロードしてからシステムにキャッシュします。

.NET CLRが署名されたアセンブリをロードし、CLR発行元にアクセスできなかった場合、アセンブリの署名を確認できなかったという情報を記録します。したがってアセンブリはロードされますが、デジタル署名されていないものとして取り扱われます。WindowsがCRLをダウンロードできない場合には、15秒のタイムアウトになるまで再取得しようとします。よって.NETアセンブリの遅延はWindowsがCRLできずにタイムアウトになるまで15秒間ダウンロードし続けることが原因で、仕様通りの動作です。

.NET CLRが、CRLの配布元にアクセスできない場合には、署名済みアセンブリの確認中にエラーやセキュリティ関連の例外メッセージを出しません。.NET CLRが署名されたアセンブリを確認するのに使用する APIである゛WinVerifyTrust()゛からのエラーは、アセンブリに署名されたとマークすることを禁止します。これはInternet Explorerがホストするインターフェイスを通してロードされたアセンブリには適用されません。

CRLを手作業でダウンロードし、システムにインストールすることもできますが、CRLの有効期間は10日から15日であるため、システムがCRLファイルをアップデートしない限り、再度同じ現象が発生します。この問題に対してコンピュータごと、もしくはアプリケーションごとの回避策があります。


コンピュータごとの回避策

コンピュータごとの回避策として、マイクロソフト社はInternet Explorerの設定でCRLチェックを無効にすることを勧めています。Internet ExplorerでCRLチェックを無効にするには、以下の手順を行います。

  1. スタート » コントロールパネルを選択します。
  2. インターネット オプションをダブルクリックします。
  3. 詳細設定タブを選択します。
  4. セキュリティの項目で発行元証明書の取り消しを確認するのチェックを外します。
インターネットオプションでCRLチェックを無効にしても、このチェックは動作しないため、セキュリティ上の危険に晒されることはありません。これは、ネットワーク設定ではWindowsがCRLにアクセスさせないからです。

さらに、プログラム的にCRL検証を設定することができます。発行元証明書の取り消しを確認するのチェックを外すと、レジストリで設定が変更されています。CRL検証を無効にするには、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing\State from 0x00023c00を0x00023e00に設定します。CRL検証を再度有効にするには、Stateキーを0x00023c00に戻します。


アプリケーションごとの回避策

アプリケーションごとにこの問題を回避するには以下の手順を行います。

  1. .NET Framwork 2.0 SP1以降を使用するか要求されるMicrosoft Hotfixをインストールします。
  2. 回避策を適用する各アプリケーションに対してアプリケーション構成ファイルを作成します。
  3. アプリケーション構成設定でgeneratePublisherEvidenceをFalseに設定します。
アプリケーション構成設定のgeneratePublisherEvidenceについては、Microsoft Knowledge Base 936707を参照してください。


関連リンク:
技術サポートデータベース 3TFAIPO8: Receiving "authenticode signature not found" Error When Accessing ActiveX Applications with Microsoft Internet Explorer


添付:





報告日時: 01/27/2005
最終更新日: 05/11/2016
ドキュメントID: 3HQAOI5B