5

2 台のマシンでサーバーとクライアントを使用して DCOM アプリケーションで作業しています。どちらも Service Pack 2 で WinXP を実行しています。両方のマシンで、同じユーザー名とパスワードでログインしています。

一方のマシンのクライアントが CoCreateInstanceEx を呼び出して、もう一方のマシンにサーバー アプリケーションを起動するように要求すると、E_ACCESSDENIED が返されます。

dcomcnfg でサーバー アプリのコンポーネント プロパティにアクセスして、全員にすべての権限を付与しようとしましたが、効果がありませんでした。

この呼び出しを成功させるにはどうすればよいですか?

更新:サーバー アプリが Windows 2000 ボックスで実行されている場合、このエラーは発生しません。CoCreateInstanceEx は S_OK を返します。

4

5 に答える 5

2

PCが両方とも同じドメインのメンバーでない場合は、「ANONYMOUSLOGON」への起動とアクセスのアクセス許可も付与する必要があります。「みんな」にはこれは含まれません。

于 2010-05-18T07:37:29.603 に答える
2

そうです、認証レベルがデフォルトに設定されている場合。デフォルト設定で設定されている認証レベルは何ですか? 興味本位で。(ただし、2000 ボックスで動作するという事実は、おそらくそれを冗長にします)

編集:

また、以前 DCOM で遊んだり作業したりしていたときに何度も再起動したことを覚えているようです。したがって、dcomcnfg の設定に満足しているときに両方のマシンをすばやく再起動しても問題はありません。

于 2008-08-21T19:42:27.400 に答える
1

3 つの確認事項:

1) dcomcnfg に戻り、アクセス セキュリティだけでなく、「起動権限」セクションにも適切なセキュリティ ユーザーまたはグループが含まれていることを確認してください。

2) 認証レベルが「なし」以外に設定されていることを確認します。

3) コンポーネントが配置されているディスク上の場所に、設定したセキュリティ権限で構成されたアカウントが実際にアクセスできることも確認します。

編集:

もう 1 つ: CoInitialiseSecurity() も最初に呼び出していますか? それはベルを鳴らします!

EDIT2:

アップデートに基づいて: 両方の XP マシンでファイアウォールを完全に削除してみて、違いが生じるかどうかを確認してください。DCOM を明示的に通過させる必要がある場合があります。

于 2008-08-21T19:31:58.983 に答える
0

私はまったく同じ問題を抱えていました。この問題は、XP SP2+ OS 以降のマシンで発生します。

次の手順を使用して解決しました。

  1. クライアント コンピューターとサーバー コンピューターの両方が同じドメインにあることを確認します。

  2. 両方のコンピューターで同じユーザーを使用する必要があります。または、クライアントとサーバーで異なるユーザーを使用する場合は、クライアントとサーバーの両方のユーザーが両方のコンピューターで特権を持っていることを確認する必要があります (特に、それらがメンバーであることを確認してください)。分散 COM ユーザー グループの。

  3. Componenet サービス MMC を開きます (dcomcnfg を実行します)。

  4. [マイ コンピューター] -> [プロパティ] -> [既定のプロパティ] に移動し、既定の偽装レベルが "識別" であることを確認します。

  5. [COM セキュリティ] タブに移動し、[アクセス許可] と [起動とアクティブ化の許可] の両方で [制限の編集] に移動し、COM アプリケーションのクライアント ユーザーとサーバー ユーザーにローカルおよびリモート アクセス許可を追加します。

  6. アプリケーションのポート 135 にファイアウォールの例外があることを確認してください...

これがお役に立てば幸いです。

于 2010-02-01T15:45:06.370 に答える