.NET COM呼び出し可能ラッパーDLLの登録/使用方法のトラブルシューティング方法
質問
C#.NET COM呼び出し可能ラッパーDLLを書きました。私はそれをstrongnameで署名し、64ビットregasm.exeでcodebaseとtypelibを登録しました。登録とすべてのコントロールのメソッドは、64ビットOLEVIWERで表示されます。ただし、64ビット\ Windows \ System32 \ CScript.exeからコントロールを使用しようとすると:
Set logger = CreateObject("MyCompany.LoggerControl")
.
エラーが発生します:
Microsoft VBScriptランタイムエラー:ActiveXコンポーネントはオブジェクトを作成できません: 'mycompany.loggercontrol'
SysutilsからProchonを使ってこれを追跡すると、見つかります:
1:41:44.8295486 PM cscript.exe 24028 regopenkey hkcr \ mycompany.loggerControl
名前が見つかりません望ましいアクセス:しかし、このキーはregeditに存在します。呼び出し側プロセスは昇格したコマンドプロンプトから実行されています。セキュリティ上の問題がある場合は、「名前が見つかりません」ではなく「アクセス拒否」になることはできませんか?
このタイプのCOM制御登録エラーを追跡するための他のツールとは何ですか?
解決
これはいくつかのトラブルシューティングのアイデアです:
-
オブジェクトを作成しようとしたときに返される正確なエラー番号を識別します:
エラーが次に登録されます
logger= createObject( "mycompany.loggercontrol")を設定する
errの場合 wscript.echo "error#"&err.number. wscript.echo err.description. wscript.quit 1 の場合終了 -
このエラーコードを調べます。たとえば、「アクセスが拒否されました」またはその他のエラーは? です。
-
あなたのオブジェクトを呼び出して、それが執行できるかどうかを確認するためにC#実行可能ファイルを作成します。
-
あなたのDLLにあなたのスクリプトが実行されているディレクトリにロードされないような他の依存関係がないことを確認してください。スクリプトを実行しているディレクトリからdepends.exeを使用できます。依存関係のためにDLLがロードされない場合は、別のDLLが見つからないか、またはその依存関係の1つを読み込むことができないというエラーダイアログが表示されます。 DLLをロードできる場合は、それが正常に登録されたと言うでしょう。
C:\ PATHTOVBS> REGSVR32 C:\ PATHTOYOURDLL \ yourdll.dll