1

COM コンポーネントにアクセスするために、C# でコード化された WPFApplication があります。アプリから COM コンポーネントへの参照を追加しました。同じマシンにクライアント(私のアプリ)とサーバー(com)の両方がある場合、期待どおりに動作します。問題は、それらが異なるマシン上にある場合です。両方のマシンは同一です。つまり、Windows 7 OS を搭載しています。そして両方とも同じドメインにあります。以下のコードで com コンポーネントのインスタンスを作成しようとしましたが、エラーは発生しません。

IPDSIntf test; 
string clsId = "85689616-277B-4E00-9A5E-19AD78E7E0E2";
var type = Type.GetTypeFromCLSID(new Guid(clsId), MachineName, true);
                var COMObject = Activator.CreateInstance(type);
                test = (IPDSIntf)COMObject;

COMで任意のメソッドを呼び出すと. test.Connect(clientId, errorCode)と言うと、「アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))」。

多くのアクセス許可を設定し、サーバー マシンのユーザー アカウントに管理者権限を付与し、アカウントを 'Distributed COM Users' グループなどに追加しましたが、それでも同じ問題が発生します。すべてのタイプのユーザー (匿名、ネットワーク、全員...) に対して、サーバー コンピューターの COM セキュリティ オプションで、DCOMCNFG と、Google 検索を行ったときに見たすべてのものを介して、「ローカルおよびリモート」アクセスを許可しました。クライアントとサーバーの両方でファイアウォールがオフになっています。

試してみるオプションはありません。修正する時間がなくなり、すでに同じグーグルで4日間費やしています。しかし、運がありません。

もう 1 つ、DCOMCNFG に自分の COM が表示されないということは、登録されていないということですか? その理由は何でしょうか。マシン内のすべての COM コンポーネントがコンポーネント サービスに登録されると思います。私の問題と何らかの関係があるとは思えないので、これについても明確にする必要があります。

よろしくお願いします。

4

2 に答える 2

0

こんにちは、このエラーは、Excel アプリケーションで同じことを行っているときに発生しました。Excel COM は実際には 32 ビットのものであり、32 ビットの DECOM 構成にアクセスする必要があることがわかりました。

実行時に「comexp.msc /32」コマンドを入力すると、32 ビット DECOM 構成にアクセスできます。

次に、「Microsoft xxx Application」が表示されます。私の場合は、DECOM 構成の Microsoft Excel アプリケーションでした。プロパティで、[ID] タブの [カスタム] および [ID] に対するすべてのセキュリティを "The Interactive User" に設定しました。

それは私のために働いた。これがあなたにも役立つことを願っています。

于 2012-06-07T06:00:28.763 に答える
0

あなたの質問の一部に対する答えがあります。

コンポーネントが DCOM にリストされていないのは、おそらく Activex dll である可能性があるためです。次の手順に従って、コンポーネントを dcom にリストします。

[スタート] --> [ファイル名を指定して実行] --> [oleview] --> [オブジェクト クラス] --> [すべてのオブジェクト] (展開) 左ペインで COM を選択します。右側のペインの [実装] タブをクリックし、[代理プロセスを使用する] をオンにします。

私はまったく同じセットアップを行っており、まったく同じエラー0x80070005に直面しており、利用可能なすべての構成を試しました。このアクセス拒否の問題を解決する根本的な原因が見つかったかどうかをお知らせください。私はすでにこれに4日間費やしています:-)

于 2012-08-21T13:06:14.277 に答える