問題タブ [out-of-process]
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.
delphi - Delphi アプリケーションが Windows によってアウト プロセス COM サーバーとして開始されたかどうかを検出する方法は?
私は Delphi アプリケーションに取り組んでいます。このアプリケーションは、直接、デスクトップ アプリケーションとして、アプリケーションを実行することによって (たとえば、エクスプローラーで実行可能ファイルをクリックすることによって)、または - アウト プロセス サーバーとして、いずれかを作成することによって間接的に開始することができます。アプリケーションに実装 (および登録) された COM オブジェクト
アプリケーションがアウト プロセス COM サーバーまたはデスクトップ アプリケーションとして開始されたかどうかを検出する方法はありますか?
service - SLAB、アウトプロセス: セマンティック ログをサービスとして実行しているときにイベントを表示できません
セマンティック ロギングをコンソールとして実行している場合は、ログに記録されたイベントを (カスタム データベース シンクを使用して) データベースに保存できますが、サービスとして実行している場合は同じことができません。ここで何が問題なのですか?
sql - リンク サーバー プロセス外の OLEDB プロバイダーでのアクセス拒否エラー
リンク サーバーをセットアップしようとしている OLAP プロバイダー用の OLEDB があります。なんらかの理由で、プロバイダーをインプロセスで実行するように設定できません (「インプロセスを許可する」オプションをチェックすることにより)。これは、SQL サーバーの読み込みに問題があると思われるカスタマイズされた .NET アセンブリを使用するためです (CREATE ASSEMBLY
正常に実行されましたが)。アウトプロセス リンク サーバーとして実行しようとすると、次のエラーが発生します。
(上記と同じエラーが Microsoft MSOLAP プロバイダーで発生することに注意してください)。
クエリが正常に実行された後の IColumnsInfo::GetColumnInfo() 呼び出しでアクセス拒否エラーが発生したことを示すエラーのさらなるトレース。
次のリンクに基づいてアクセス許可を設定しようとしました。
http://www.sqlservercentral.com/articles/Linked+Servers/73794/
しかし、それらは機能しません。他の誰かがこの問題を経験したかどうか疑問に思います.
c++ - アウトプロセス クライアントで登録不要の COM オブジェクト プロキシを取得する方法
これを可能にする API があるかどうか、または自分で作成する必要があるかどうかはわかりません。これが私が達成しようとしていることです。
NT サービスに接続して別の COM サーバーとのセッションを開始するアプリケーションがあります。
- アプリケーション、クライアント。
- ブローカー NT サービス; (システム アカウント コンテキスト)。
- セッション COM サービス。(システム アカウント コンテキスト、必要に応じてユーザーを偽装します)。
セッション サーバーには、NT サービスに接続するすべてのアプリケーション インスタンスに対して実行中のインスタンスがあります。アプリケーションは、セッション サーバーが COM ライブラリ DLL をロードし、セッション サーバー内のそれらの DLL からオブジェクトとサービスをホストするように要求できます。DLL は、登録不要のアクティベーションによって登録されます。
セッション サーバーからオブジェクトを作成し、それらをアプリケーションに戻すことは、それらが IDispatch から派生している限り正常に機能します。これは、スクリプト言語がこれを使用することが予想されるため、システム全体の要件であり、それが要求されたインターフェイスです。C++ アプリケーションは、セッション サーバーでホストされているオブジェクトを使用することもできます。しかし IDispatch は、C++ で扱うには非常に冗長なインターフェイスです。
私の質問はこれです:
ホストされている DLL には、アプリケーションが認識しているデュアル カスタム インターフェイスがあり、それらのインターフェイスに関する型情報は、ITypeInfo を介してアプリケーションで読み取ることができるとします。ITypeInfo 情報も含む IDispatch インターフェイスを提供できる場合、実行時に元のカスタム インターフェイスを模倣するプロキシを作成する API はありますか。プロキシに必要なのは IDispatch インターフェイスを呼び出すことだけですが、C++ にはカスタム インターフェイスとして表示されます。より最適なソリューションは、DLL がそのマニフェストに登録したのと同じプロキシ (既定の OLE オートメーション プロキシ) を使用することです。
複数のアプリケーションが同じモジュールを持っていてもバージョンが異なる可能性があるため、DLL のプロキシ/スタブを登録できません。したがって、登録不要のアクティベーションを使用します。
etw - EventEntry のスキーマは、アウトプロセス セマンティック ログを使用して更新されませんでした
カスタム EventSource クラスを作成し、次のようにログのメソッドを追加します。
また、SemanticLogging-svc.exe -c を使用してトレース イベント サービスを開始し、このコマンドを実行する前に、SemanticLogging-svc.xml を次のように構成しました。
そして、Test() メソッドの呼び出しを開始します。初めて、flatFileSink は正しいレベルのイベントを警告として記録します。ただし、属性の Test() メソッドのレベルを Critical に変更して Test() メソッドを呼び出した後でも、flatFileSink はレベルを警告として記録します。それは完全に間違っていました!OnNext メソッドのパラメーターである EventEntry のスキーマであることはわかっています。しかし、インプロセス リスナーを使用すると、レベルが Critical に更新される可能性がありますが、これは正しいことです。
では、アウトプロセスを使用している場合、レベルがまだ古いのはなぜですか? それはETWに何か問題がありますか?マシンにキャッシュがあるようです。また、このキャッシュは、パフォーマンス モニターでイベント トレース セッションを停止して削除したり、コンピューターを再起動したりしてもクリアできませんでした。このキャッシュを本当にクリアしたいのですが、その方法がわかりませんでした。
また、Event Attribute の Version を変更したり、EventSource Name を別の名前に変更したりすると、プロセス外のレベルが更新されることがわかっています。しかし、バージョンを変更するのを忘れている可能性があるため、これは良い方法ではないと思います。
それで、誰かが私を助けることができますか?
com - C++ Builder: プロセス外 COM サーバー
おそらく私は非常に基本的なものを見逃していますが、スタックオーバーフロー/グーグル/などで解決策を見つけていません.
これにより違いが生じる場合は、64 ビットの C++ Builder (XE7) で COM サーバーを作成する必要があります。最初のステップとして、インプロセス COM サーバーを作成し、コンパイルして動作させ、適切に登録します。しかし、アウトプロセス COM サーバーが必要で、移行に迷っています。(必要: アウトプロセス COM を使用するための外部要件。変更できません。)
ドキュメント ( http://docwiki.embarcadero.com/RADStudio/Seattle/en/COM_Servers )から私が理解したのは、おそらく「スレッド モデル」を適切に設定する必要があり、おそらく他の変更が必要であるということです ( http: //docwiki.embarcadero.com/RADStudio/Seattle/en/COM_Object_Wizard )、しかし、何を試しても、そこから EXE を取得できません。
例へのポインタ、または本質的な違いがあるいくつかの単語、またはどのダイアログをもっと勉強する必要があるかなどを本当に感謝します.
vb.net - アウト プロセス COM サーバーとイベント処理
クライアント VB アプリケーションで使用するアウト プロセス VB COM サーバーの作成に取り組んでおり、アプリケーションに安定性をもたらします。
MSDN からのサンプル コードの次のリンクは、VB COM サーバーの作成に役立ち、その COM サーバーからメソッド、プロパティ、およびイベントを正常に公開しました。https://code.msdn.microsoft.com/windowsdesktop/VBExeCOMServer-a5b9f49f
次のコードを使用して、クライアント アプリケーションで COM サーバーを使用しました。プロパティと関数の呼び出しでは問題なく動作しましたが、COM サーバーによって公開されたイベントを処理しようとすると、コンパイル時エラーが発生します。
//コンパイル時エラー!!! TestEvent は「オブジェクト」のイベントではありません
このコンパイル時エラーを解決するために、次のコードを使用してオブジェクト型を「BaseControllerSimple」型に型キャストしようとしましたが、その変更により、実行時に例外が発生します。
//例外! タイプ 'System.__ComObject' の COM オブジェクトをクラス タイプ 'MeridiaAPICOMServer.BaseControllerSimple' にキャストできません。COM コンポーネントを表す型のインスタンスは、COM コンポーネントを表さない型にキャストできません。ただし、基になる COM コンポーネントがインターフェイスの IID に対する QueryInterface 呼び出しをサポートしている限り、インターフェイスにキャストできます。
その後、COM Server のコードでインターフェイスを作成してみて、そのインターフェイスを実装する「BaseControllerSimple」クラスを作成しました。インターフェイスとそれを実装するクラスのコード スニペットを次に示します。
以下は、IBaseControllerSimple クラスのコードです。
インターフェイスを定義した後、次のコードを試しました。
//例外'System.__ComObject' 型の COM オブジェクトをインターフェース型 'IBaseControllerSimple' にキャストできません。IID '{0742DA3D-1CFA-4A3D-A104-35DBECB4EA48}' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーのために失敗したため、この操作は失敗しました: No such interface supported (HRESULT からの例外: 0x80004002 (E_NOINTERFACE)) .
解決策、または VB COM サーバーによって公開されるイベントの処理の問題を解決するのに役立つあらゆる種類のフィードバックを楽しみにしています。前もって感謝します。