3

C#.NETComの呼び出し可能なラッパーDLLを作成しました。私はStrongNameで署名し、コードベースとtypelibを64ビットのregasm.exeに登録しました。登録とすべてのコントロールのメソッドは、64ビットのOleViewerで表示できます。ただし、64ビットの\ Windows \ System32 \ cscript.exeからコントロールを使用しようとすると、次のようになります。

  Set logger = CreateObject("MyCompany.LoggerControl")

これにより、エラーが発生します。

Microsoft VBScriptランタイムエラー:ActiveXコンポーネントはオブジェクトを作成できません:'MyCompany.LoggerControl'

SysutilsのProcMonを使用してこれを追跡すると、次のことがわかります。

1:41:44.8295486 PM cscript.exe 24028 RegOpenKey HKCR \ MyCompany.LoggerControl
名前が見つかりません目的のアクセス:読み取り

ただし、このキーはRegeditに存在します。呼び出しプロセスは、管理者特権のコマンドプロンプトから実行されています。セキュリティ上の問題である場合、エラーは「NAMENOTFOUND」ではなく「ACCESSDENIED」にすべきではありませんか?

このタイプのCOM制御登録エラーを追跡するための他のツールは何ですか?

4

1 に答える 1

1

トラブルシューティングのアイデアをいくつか示します。

  1. オブジェクトを作成しようとしたときに返される正確なエラー番号を特定します。

    エラー時再開次へSetlogger
    = CreateObject( "MyCompany.LoggerControl")
    If Err Then WScript.Echo "Error#"&Err.Number WScript.Echo Err.Description WScript.Quit 1 End If

  2. このエラーコードを調べてください。たとえば、「アクセスが拒否されました」またはその他のエラーですか?

  3. オブジェクトを呼び出すC#実行可能ファイルを作成し、オブジェクトが正常に作成できるかどうかを確認します。

  4. DLLに、スクリプトが実行されるディレクトリにロードされるのを妨げる他の依存関係がないことを確認してください。スクリプトを実行しているディレクトリからdepends.exeを使用するか、私のお気に入りの貧乏人の手法であるzippy32を使用してDLLをロードすることができます。依存関係が原因でDLLのロードに失敗した場合、別のDLLが見つからないか、依存関係の1つをロードできないことを示すエラーダイアログが表示されます。DLLを正常にロードできる場合は、正常に登録されたと表示されます。

    C:\ PathToVbs> zippy32 C:\ PathToYourDLL \ YourDLL.dll

于 2012-03-08T19:21:52.863 に答える