問題タブ [dcom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
13432 参照

security - DCOM: CoCreateInstanceEx は E_ACCESSDENIED を返します

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

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

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

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

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

0 投票する
5 に答える
1025 参照

.net - .NET によって生の COM および DCOM プログラミングが不要になりましたか?

.net フレームワークの導入により、COM および DCOM での生のプログラミングは冗長になりましたか?

(System.EnterpriseServices 名前空間を介したトランザクション管理など、一部の COM+ サービスを使用する場合を除く)

0 投票する
2 に答える
590 参照

windows - 詳細な DCOM ドキュメントはどこにありますか?

私は、DCOM を使用して本質的に複数のピア間で通信するアプリケーションに取り組んでいます。通常の使用では、別々のマシン上のインスタンスがさまざまなオブジェクトを相互に提供します。歴史的に、これが機能するために、いくつかの魔法の呪文を使用してきました。その主なものは、ユーザーがすべてのマシンで同じ名前のアカウントにログインする必要があることです (これらはローカル アカウントであり、利用可能なドメインがないことに注意してください)。明らかに、これは改善できるユーザー エクスペリエンスの側面です。

DCOM認証がどのように機能するかをよりよく理解したいのですが、CoInitializeSecurity()CoSetProxyBlanket()などのMSDNドキュメントから全体を組み立てるのは困難です。DCOM 操作がどのように受け入れられるか、または拒否されるかについての完全な説明はありますか? 書籍、雑誌、WEB、どんなフォーマットでも構いません。

0 投票する
1 に答える
726 参照

windows-vista - Vistaは、DCOM呼び出しでインターフェイスIDをより厳密にチェックしますか?(スタブは悪いデータを受け取りました)?

皆さんがこの質問の長さ、そして物語のやり方を許してくれることを願っています。ブログで状況を詳しく説明することにしました。後でジョエルのこのサイトへの招待を見て、誰かが状況について何か洞察を持っているかどうかを確認するために、ここに貼り付けたいと思いました。

私は、ATLを使用してC++で記述された中間層COM+コンポーネントに対してDCOMを話すVisualBasicシッククライアントで構成されるアプリケーションを作成し、現在サポートしています。8つのオフィスすべてで稼働しています。各オフィスは、COM +アプリケーション(18の個別のコンポーネントで構成される)とSQLServerを含むバックエンドサーバーをホストします。SQLServerは通常、同じバックエンドサーバー上にありますが、そうである必要はありません。

最近、最大のオフィスであるニューヨークのバックエンドサーバーをMSCクラスターからVMWareのESXテクノロジーでホストされる新しい仮想マシンに移行しました。COM +アプリケーションの場所が古いサーバーから別の名前の新しいサーバーに移動したため、すべてのクライアントをリダイレクトして、新しいサーバーでCOM+アプリケーションをアクティブ化する必要がありました。同様のインフラストラクチャのアップグレードを行ったいくつかの小規模なオフィスで基本的に同じことを行ったため、手順は古くからありました。

すべてが日常的なもののようで、月曜日の朝、オフィス全体(約1,000台のWindows XPワークステーション)が新しいサーバーで問題なく実行されていました。しかし、その後、私のモバイルグループから電話がかかってきました。自宅でVPN接続を使用している弁護士がいて、新しいサーバーにリダイレクトされた後、奇妙なエラーが発生していました。

は?私はこれまでこのエラーメッセージを見たことがありませんでした。それは新しいサーバーでしたか?しかし、オフィス内のすべてのワークステーションは正常に機能していました。私はモバイルグループに弁護士を古いサーバー(まだ稼働していた)に戻すように指示しましたが、エラーは消えました。では、違いは何でしたか?この弁護士は自宅でVistaを運営していたことが判明しました。

私たちはどのオフィスでもVistaを運営していませんが、自宅でVistaを運営している弁護士がいます(確かに私のニューヨークのオフィスには何人かいます)。私もそうですが、この問題は見たことがありません。問題があったことを確認するために、Vistaラップトップを起動し、新しいサーバーをポイントすると、同じエラーが発生しました。私はそれを古いサーバーに戻しました、そしてそれはうまくいきました。明らかに、Vistaと新しいサーバー上のコンポーネントに問題がありました。これは、XPクライアントには影響しないように思われる問題です。どうなり得るか?

次の停止-私のラップトップのアプリケーションエラーログ。これにより、エラーに関する詳細情報が得られました。

インターフェイスIDは、謎を解明するために必要な手がかりを提供しました。「予期される」インターフェイスIDは、MDACのRecordsetインターフェイス(具体的にはそのインターフェイスのバージョン2.1)を識別します。「返された」インターフェイスは、Recordsetの新しいバージョンに対応します(バージョン2.5は、vtableの最後に1つの追加エントリが含まれている点でバージョン2.1とは異なります--メソッドSave)。

実際、私のコンポーネントのインターフェースは、Recordsetを出力パラメーターとして渡す多くのメソッドを公開しています。それで、彼らは突然、異なるインターフェースIDを持つ新しいバージョンのRecordsetを返しましたか?確かにそうだったようです。そして、なぜそれが重要なのかと思いました。vtableは、古いインターフェイスのクライアントと同じように見えます。実際、DCOMではなくインプロセスCOMについて話していた場合、この明らかに無害なインピーダンスの不一致は黙って無視され、問題は発生しなかったと思います。

もちろん、プロセスとマシンの境界が関係する場合、クライアントとサーバーの間にプロキシとスタブがあります。この場合、私はフリースレッドマーシャラーでタイプライブラリマーシャリングを使用していました。したがって、解決すべき2つの謎がありました。

新しいサーバーのメソッドから出力パラメーターで異なるインターフェイスを返すのはなぜですか?

これがVistaクライアントにのみ影響するのはなぜですか?

私のサーバーソフトウェアは8つのオフィスのそれぞれのサーバーでホストされていたので、Vistaクライアントを順番にすべてのオフィスに向けて、Vistaに問題があるものとないものを確認することにしました。照明テスト。古いサーバーの一部は引き続きVistaで動作しましたが、新しいサーバーは動作しませんでした。古いサーバーのいくつかはまだWindows2000を実行していましたが、新しいサーバーは2003年でしたが、それは問題ではなかったようです。

コンポーネントDLLの日付を比較した後、クライアントが2003Vistaより前の日付のコンポーネントDLLを持つサーバーをポイントした場合は常に問題がないように見えました。しかし、2003年以降の日付のDLLを持っているものには問題がありました。信じられないかもしれませんが、何年もの間、サーバーコンポーネントのコードに変更はありませんでした(または少なくとも重要な変更はありませんでした)。どうやら、日付が異なるのは、単に開発マシンでコンポーネントを再コンパイルしたためです。そして、それらの再コンパイルの1つが2003年に行われたように見えました。

電球が点灯しました。Recordsetsをサーバーからクライアントに戻すとき、私のATLC++コンポーネントはインターフェイスを_Recordsetとして参照します。このシンボルは、msado15.dll内に埋め込まれたタイプライブラリに由来します。これは私がC++コードで持っていた行です:

msdad15.dllの15にだまされないでください。どうやらこのDLLはMDACバージョンの長いシリーズで名前を変更していません。

当時、アプリケーションをコンパイルしたとき、MDACのバージョンは2.1でした。したがって、2.1インターフェイスIDでコンパイルされた_Recordsetは、これらのコンポーネントを実行しているサーバーによって返されるインターフェイスです。

すべてのクライアントは、1999年に生成された(私が信じる)COM +アプリケーションプロキシを使用します。私のインターフェイスを定義するタイプライブラリには、次の行が含まれています。

これは、メソッドの出力パラメーターにバージョン2.1のRecordsetが必要な理由を説明しています。明らかに問題は、2003年の再コンパイルと、その時点で_Recordsetシンボルがバージョン2.1に対応しなくなったことにありました。実際、_Recordsetは、別個のインターフェースIDを持つ2.5バージョンに対応していました。私にとっての解決策は、C++コードのすべての参照を_RecordsetからRecordset21に変更することでした。コンポーネントを再構築し、新しいサーバーにデプロイしました。出来上がり-クライアントは再び幸せそうに見えた。

結論として、私には2つのやっかいな質問が残っています。

プロキシ/スタブインフラストラクチャがVistaクライアントとは異なる動作をするように見えるのはなぜですか?Vistaは、XPよりもメソッドパラメータから返されるインターフェイスIDを厳密にチェックしているようです。

これが起こらないように、1999年にこれをどのように別の方法でコーディングする必要がありましたか?インターフェイスは不変であると想定されており、新しいバージョンのMDACで再コンパイルすると、メソッドが出力パラメーターとして別のRecordsetインターフェイスを返すようになったため、誤ってインターフェイスを変更しました。私の知る限り、当時のタイプライブラリにはバージョン固有のシンボルがありませんでした。つまり、MDACタイプライブラリの新しいバージョンではRecordset21が定義されていますが、そのシンボルは2.1タイプライブラリでは使用できませんでした。

0 投票する
3 に答える
979 参照

delphi - DCOM でのリモート起動の設定

DCOMCNFG を使用して DCOM アプリケーションのリモート起動を無効にできますが、これをプログラムで行いたいと考えています。CoInitializeSecurity を見ましたが、そうではないようです。誰かがこれをしましたか?

私はDelphi BTWを使用しています。

0 投票する
1 に答える
2039 参照

dcom - DCOM 構成エントリの「ローカル パス」が間違っている

DCOM Config にあるコンポーネントの「ローカル パス」(dcomcnfg のそのコンポーネントの [プロパティ] ページの [全般] タブ) が間違った場所を指しています。ただし、そのディレクトリに移動し、「componentname.exe /unregserver」を使用してコンポーネントを登録解除すると、そのコンポーネントのローカル パスは変更されません。

また、「componentname.exe /regserver」を使用して正しいディレクトリに移動し、そこにコンポーネントを登録しようとしましたが、「ローカル パス」の値は変わりません。

助言がありますか?

0 投票する
4 に答える
3377 参照

com - COMオブジェクトを作成しようとすると「オブジェクト変数またはWithブロック変数が設定されていません」

次のコード行を使用して COM オブジェクトを作成しようとしている VB6 dll があります。

ただし、これは「オブジェクト変数またはブロック変数が設定されていません」というエラーで失敗します。

dcomcnfg で OPSValuer.OPSValue を確認でき、問題なく登録されているようです。問題の原因について何か考えがある人はいますか?

0 投票する
2 に答える
597 参照

vb6 - How do I let a non-admin user instantiate objects from a VB6 ActiveX Exe?

Question says it all really...

I have tried changing the "Allow non-admin users to run this program" setting on the property pages, and have also given the non-admin user in question what looks like the correct privileges in Component Services -> DCOM Config.

Is there anything else I can do ?

This is on Server2003 BTW.

Thanks

Matt

0 投票する
2 に答える
5725 参照

vb.net - COM+アプリケーションプロキシの登録中にエラーが発生しました

MSIおよびCABファイルを生成するCOM+アプリケーションプロキシをエクスポートし、それらをいくつかの異なるWinXPおよびVistaマシンに正常にインストールしました。ただし、うまく機能していないWinXPボックスがあります。MSIを実行しようとすると、次のエラーメッセージが表示されます。

COM+アプリケーションの登録中にエラーが発生しました。

それはそこで止まり、COM+でアプリケーションを作成することすらできません。どこを見ればいいのか?いくつかの依存関係はMIA、無効、または誤って構成されていると推測していますが、魔法のソースに何が欠けているのか理解できないようです。

また、クライアントアプリプロキシを手動で登録した経験のある人がいれば、それもまたうねりになります。

平和|露

0 投票する
5 に答える
10167 参照

c# - プログラムによるdcomcnfg機能

DCOMのプログラミング方法についてはあらゆる種類のものを見つけることができますが、プログラムでセキュリティを設定/チェックする方法については実際には何もありません。

私はdcomcnfgを再作成しようとはしていませんが、C#(推奨、またはVB.net)でdcomcnfgのすべての機能を再現する方法を知っていれば、私の目標は見えています。

これに関する優れたリソース、オープンソースAPI、または各ステップの実行方法の簡単な例さえも見つけることができないようです。ここでも、DCOMまたはdcomcnfgはほとんど結果を返さず、セキュリティを設定/検証/一覧表示する方法については何も返しません。

誰かがオープンAPIまたはいくつかの例へのポインタを持っているなら、私はそれをいただければ幸いです。