web-dev-qa-db-ja.com

ActiveXコンポーネントはオブジェクトを作成できません

Windows Server 2008サーバーにサードパーティアプリをインストールしたばかりで、

ActiveXコンポーネントはオブジェクトを作成できません

vBScriptでCreateObjectを使用してアクセスしようとするとメッセージが表示されます。

確実にインストールされ、「プログラムと機能」の下に存在します。誰が何が起こっているかを把握するためにチェックできるもののリストを持っていますか?

提案されているようにregsvr32.exe /i bob.dllを使用してDLLを登録しようとしましたが、このエラーが表示されます。

モジュール「Bob.dll」はロードされましたが、エントリポイントDllRegisterServerが見つかりませんでした。

「Bob.dll」が有効なDLLまたはOCXファイルであることを確認してから、再試行してください。

この時点で、これは64ビットマシン上の32ビットアプリケーションであることに注意してください。また、Windows XP 32ビットです。

34
GordyII

このアプリケーションをVBScriptで動作させるには、2つのことをしなければなりませんでした。

  1. RegAsm.exeを実行してDLLを登録します。
  2. C:\ Windows\SysWOW64\cscript.exeを実行してVBScriptを実行します。

ご助力いただきありがとうございます。

[〜#〜] also [〜#〜]これらが機能しない場合は、他の回答を確認してください here about 32ビットアプリケーションを有効にします。

45
GordyII

また、IIS内のDefaultAppPoolの詳細設定で「32ビットアプリケーションを有効にする」がTrueに設定されていることを確認する価値があります。

39
Keith Trangmar

アプリはCOMオブジェクトを作成しようとしていますが、そのCOM DLLが存在する場合でも、インストールされていない別のDLLに依存する可能性があります。 DependencyWalker これが該当するかどうかを確認します。

10
MrTelly

これは古い質問であり、すでに正しいとマークされた回答がありますが、それは私を助けませんでした。

今後この方法でやってくる貧しい人々については、ブラウザの設定を確認してください-

私にとって、IEを使用して修正したのは、関連ゾーンである「カスタムレベル」の[ツール/インターネットオプション]、[セキュリティ]タブに移動し、ActiveX設定を確認することでした。 「スクリプトを実行しても安全とマークされていないActiveXコントロールの初期化とスクリプト」を「有効」に設定すると、この問題が修正されました

5
DannykPowell

また、コンポーネントを登録するときに、regsvr32.exeの32ビットバージョンを使用していることを確認してください。昇格したプロンプトでregsvr32.exeを実行するだけで、標準の64ビットバージョンがデフォルトで使用されます(奇妙なことに、C:\ Windows\System32にあります)。

必要だと思うバージョンは、C:\ Windows\SysWow64\regsvr32.exeにあります。

5
Verakso

参照しているオブジェクトがシステムに登録されていないように見えます。あなたはそれがインストールされていると言ったのを知っていますが、それは必ずしもそれが登録されていることを意味しません。これを確認するには、レジストリで使用したprogIDを検索します。

このコードの例:

set objFSO = CreateObject("Scripting.FileSystemObject") 

レジストリでScripting.FileSystemObjectを検索します。次に、InProcServer32値について、見つかった値の上にあるレジストリキーを調べます。これにより、登録元のActiveXファイルへのパスが得られます(Scripting.FileSystemObjectの場合、ファイルは "c:\ windows\system32\scrrun.dll"です)。

レジストリでprogIDが見つからない場合は、システムに登録されていないため、問題になります。登録されていない場合は、登録するファイル(通常はサードパーティアプリの同じフォルダーパスにある.ocxまたは.dll)を見つけて、これらのファイルを登録する必要があります。ファイルを登録するコマンドは次のとおりです。

regsvr32 /i "c:\windows\system32\scrrun.dll"

レジストリにprogID値があり、システムに存在するファイルを参照している場合でも、ファイルを再登録してみてください。登録がどこかで壊れたことがあり、ファイルを再登録する方が簡単だったことがわかったので、問題を修正しました。

2
mrTomahawk

32ビットCOM/Active Xの場合、C:\ Windows\SysWOW64 \にあるバージョン32ビットのcscript.exe/wscript.exeを使用します。

1
Jean-Philippe

私が書いているVB6プログラムでも同じ問題がありました。フォームはScriptControlオブジェクトを使用して、ユーザーが選択したVBScriptを実行します。

先日、VBScriptがScripting.FileSystemObjectを作成しようとしたときに突然「ランタイムエラー429」の表示を開始するまで、正常に機能していました。

ここで提案されたすべての解決策を試して、丸1日怒った後、アプリケーションに問題があるのではないかと疑い始めました。

幸いなことに、その形式のバックアップバージョンがありました。それらのコードを比較したところ、誤ってScriptControlオブジェクトのUseSafeSubsetプロパティをTrueに設定していたことがわかりました。

フォームの唯一の違いであり、バックアップコピーを復元した後、それは魅力のように機能しました。

これが誰かに役立つことを願っています。 VB6でアップ! :-)

マックス-イタリア

0
Max1234-ITA

私はこれが古いスレッドであることを知っていますが、アンチウイルスがシステム上のWin32APIとスクリプティングをブロックしているかどうかを確認した人はいますか?オフィスシステムにCylanceProtectをインストールしましたが、他の人がリストしたのと同じ問題が発生しています。これは、イベントビューアーでWindowsログを確認すると確認できます。

0
sifar

また、vbscriptでも同じエラーが発生します。

Set objFSO = CreateObject("Scripting.FileSystemObject")

解決:
コマンドラインを開き、次を実行します。

regsvr32 /i "c:\windows\system32\scrrun.dll"

そしてそれは動作します

0

私はExcelでも同じ問題があり、32 COM DLLをExcel 64ビットバージョンで使用しようとしましたが、このエラーが発生しました。COMdllを64ビットバージョンに再構築し、エラーが消えますので、COM dllがアプリケーションと同じアーキテクチャ(x86とx64)を持っていることを確認してください。

0
Malick

私もこの問題を抱えていました。 64ビットシステムで古い32ビットDLLを実行しようとしていました。 .dllをC:\ Windows\SysWoW64 \ディレクトリにコピーし、これを実行することで機能しました。

%systemroot%\SysWoW64\regsvr32 "C:\Windows\SysWoW64\thenameofyourdll.dll"

また、 IIS 32ビットアプリを実行可能

0
Chris Broski