問題タブ [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.

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

security - プロセスがアウトプロセス COM サーバーをアクティブ化するために必要な特権

サードパーティのアウトプロセス COM サーバーと、それをアクティブ化しようとしているクライアント プログラムがあります。C# と C++ の 2 つを作成しました。VS2010 からクライアント プログラム (いずれか) を Ctrl-F5 (昇格モードで開始) で開始すると、クライアントは COM サーバーをアクティブ化できません。「クラスが登録されていません」というエラーが表示されます。コマンド ライン/Windows エクスプローラーからクライアントを起動すると、クライアントは正常にアクティブな COM サーバーを実行します。

したがって、ある場合には動作し(COMサーバーをアクティブにする)、別の場合には動作しない(COMサーバーをアクティブにしない)exeモジュールが1つあります。後者のケースは、モジュールが VS2010 から実行された場合です (デバッグではなく、Ctrl-F5 だけで)。

これは、vs2010で起動したモジュールがその権限を継承するため、権限に問題があると思われます。

processprivileges.codeplex.com の助けを借りて、私は 2 つの特権セットを取得します: それが機能しない場合: IncreaseQuota => 無効な
セキュリティ => 無効
な TakeOwnership => 無効
な LoadDriver => 無効な
SystemProfile => 無効な
SystemTime => 無効
な ProfileSingleProcess = > 無効な
IncreaseBasePriority => 無効
な CreatePageFile => 無効な
バックアップ => 無効な
復元 => 無効な
シャットダウン => 無効な
デバッグ => 有効
な SystemEnvironment => 無効
な ChangeNotify => 有効
な RemoteShutdown =>無効
Undock => 無効
ManageVolume => 無効
Impersonate => 有効
CreateGlobal => 有効
IncreaseWorkingSet => 無効
TimeZone => 無効
CreateSymbolicLink => 無効

これが機能する場合: シャットダウン => 無効
ChangeNotify => 有効
Undock => 無効
IncreaseWorkingSet => 無効
TimeZone => 無効

COM アクティベーションに関連する疑わしい特権は見当たりません。しかし、それ以外の理由は見当たりません。

あるケースではアウトプロセス COM サーバーが正常にアクティブ化され、別のケースではアクティブ化されないのはなぜですか?

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

c# - アウトプロセスCOMサーバーを起動するWindowsサービス-CSIDL_APPDATAが別のユーザーパスとして返される

私はC#で書かれたWindowsサービスを持っています。このサービスは、多数のMTAスレッドを生成します。これらの各スレッドでは、アウトプロセスCOMクラスがインスタンス化されます。現在のユーザーとして実行するようにサービスを設定しました(適切なログイン資格情報を追加します)。サービスを開始すると、タスクマネージャーから、ユーザーとして実行されているように見えます。サービスがローカルローミングユーザーディレクトリをチェックすると、期待どおりにユーザーディレクトリが返されます。アウトプロセスexeとして実行されているCOMクラスがこのチェックを実行すると、Windows \ System32 \ Config \ systemprofile \ AppData\Roamingにパスが返されます。

誰かがここで何が起こっているのか、さらに具体的には、サービスユーザーとして実行するためにプロセスサーバーから抜け出す方法に光を当てることができますか?タスクマネージャーをチェックインしましたが、タスクマネージャーによると、exeはサービスと同じユーザー(同じセッション)として実行されています。

OSが要因かどうかはわかりませんが、Vista 32(sp2)とWin7 64(sp1)の両方でこれを確認しました。

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

com - API 呼び出しで静的インスタンスを共有する .NET アウトプロセス COM オブジェクト

私たちの状況を説明するのは難しいです。

3層アプリケーションがあります。エンジンは C++ でコーディングされた DLL であり、API 呼び出しを介してエンジンにアクセスする VB6 ActiveX EXE があり、最上位には相互運用 DLL で中間層を呼び出す Excel アドイン (VSTO フレームワークを使用した C#) があります。 . この時点で、アドインからエンジンへの「接続」ごとに新しい EXE が作成され (VB6 は API 呼び出しを使用してエンジンにアクセスします)、すべて正常に動作します。現在、中間層を .NET に移動しています。「おそらく」正常に動作します (ユニット テストはすべてパスします) が、2 つの「接続」を同時に開いたときにエラーが見つかりました (アップ、ユニット テストなしでこの状況を確認します)。これは新しい動作だからです)。DLL には、同じプロセス内のすべてのインスタンスで共有される静的オブジェクトがあり、「接続」間の相互作用があります。私たちの古いバージョンでは、それぞれの「接続」

この質問のヒントに従ってください。中間層でプロセス外オブジェクトを実行するために C# で COM EXE を作成しようとしましたが、結果は同じでした。それらは静的オブジェクトを共有し、最後に、各接続は独立したプロセスを作成しません。

API呼び出しをATLに移動するか、静的オブジェクトをハンドル付きのインスタンス化可能な参照に変更し、すべてのAPI呼び出しを変更してこのハンドラーを取得/設定することは明らかですが、現時点では手頃な価格ではありません。MS All-in-one ですべての例を確認しましたが、解決策が見つかりませんでした。一度に 1 つの接続のみを保持することもできません。各ワークブックは 1 つの接続を持つことができます。将来的には、同時に複数の接続を持つ Web アプリケーションを調査したいと考えています。

なにか提案を?

前もって感謝します、

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

asp.net - アウト プロセス セッションのシリアル化可能としてマークされるクラスの識別

セッション状態のアウト プロセスに移行しようとしています。もちろん、セッションに格納する予定のクラスをシリアライズ可能としてマークする必要があります。

サイトの完全な回帰テストに頼らずに、黄色い画面でそれらをフラッシュすることなく、どのクラスをシリアライズ可能としてマークする必要があるかを自動的に決定する方法はありますか?

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

asp.net - 実行中のASP.NETアプリケーションのセッションでオブジェクトを表示する

アプリをプロセス外のセッション状態に移行しようとしていますが、シリアル化に失敗しているセッションオブジェクトが見つかりません-YSODスタックトレースが明らかになりません。

実行中のアプリケーションのセッション状態で現在保存されているオブジェクト、または少なくともオブジェクトのタイプを表示することは可能ですか?実行中のアプリにデバッガーを接続し、そのソースコードを利用できるようにすることを除けば、これが可能かどうかはわかりません。

私はAlachisoftNCacheを使用しているので、これがスタックトレースですが、役に立ちません。

アップデート

SQLServerのセッション状態を使用しても同じ結果が得られます。

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

c# - 別のプロセスで実行しているときに、あるプロセスから生体オブジェクトを呼び出す

私は自分が何について話しているのか本当にわからないので、この質問をする方法がよくわかりません。2つのDLL(.NET)があり、それぞれが2つの異なるアプリケーションプロセスで実行されるアドインです。つまり、アプリケーション1はDLL 1をロードし、アプリケーション2はDLL2をロードします。ロード中にこれらのDLLが通信できるようにしたかったのです。各DLLで、ホストプロセスによってインスタンス化される正確なクラスを知っており、各プロセスのこれら2つの生きているオブジェクトが通信できるようにします(相互にメソッドを呼び出します)。これは可能だと思われます。誰かが以前にこのようなことをしたことがありますか?

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

java - Macのアウトプロセスビデオプレーヤー(vlcj)

私はVLCJを使用して、同じウィンドウに多数のメディアプレーヤーを埋め込んでいます。WindowsとLinuxでは、プロセスが停止している可能性があるため(安定している必要があります)、つまり、下にネイティブライブラリがあるため、これは問題なく機能します。これを回避する方法はありません)、他のプロセスでウィンドウを変更するだけです。

ただし、このアウトプロセスアプローチはMacOSで機能しますか?私が見つけた情報は、Windows / Linuxの場合とは異なり、あるプロセスから別のプロセスから制御できるようにするためのネイティブ呼び出しがある可能性があることを示唆しているようです。これは事実であり、もしそうなら、それを可能にする可能性のあるネイティブコードに関する詳細情報がありますか?情報がまばらであるとお詫びします。現時点でテストできるMacがないため、何も実行して試して何が起こるかを確認することはできません。

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

c# - COM Interop、クライアントがアウトプロセス COM でインターフェイスを見つけられない

アウトプロセス COM サーバーをセットアップするためのベースとしてMicrosoft のCSExeCOMServerを使用していますが、正しく動作しません。サーバーは 64 ビット、クライアントは 32 ビットです。

これがサンプルインターフェースです

そしてクラス

プログラムは実行されますが、クライアントが接続すると、サーバーが ObjectClassFactory で CreateInstance をトリガーし、Marshal.GetComInterfaceForObject(new XXCryptService(), typeof(IXXCryptService)) を使用して ppvObject でオブジェクトを返し、0 を返した後、クライアントでクラッシュします。

.NET でクライアントを実行すると、「タイプ 'COMTest.XXCryptService' の COM オブジェクトをインターフェイス タイプ 'COMTest.IXXCryptService' にキャストできません。IID '{6990FF5F- 22E2-4032-8B98-36115DBCEFFF}' は次のエラーのために失敗しました: Element not found. (Exception from HRESULT: 0x8002802B (TYPE_E_ELEMENTNOTFOUND)).".

Delphi でクライアントを実行すると、EIntfCastError で例外がトリガーされ、「Interface not supported」というメッセージが表示されます。「タイプ ライブラリのインポート」で COM をインポートし、このように使用します。

TLBインターフェースはこんな感じ

レジストリを確認したところ、すべてが適切に登録されているようですが、なぜこの問題が発生するのかわかりません。

ここにいる人は、何が問題なのか手がかりを持っていますか?

編集: クライアントを 64 ビットでコンパイルしましたが、正常に動作しています。また、間違ったパスを参照していました。調整した後、.NET x86 クラ​​イアントで別のエラーが発生しました。

IID '{6990FF5F-22E2-4032-8B98-36115DBCEFFF}' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーにより失敗したため、この操作は失敗しました: タイプ ライブラリ/DLL の読み込み中にエラーが発生しました。(HRESULT からの例外: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))

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

winapi - プロセス外のActiveXEXEを使用したWindowsシャットダウンの処理

さまざまなタスクにいくつかのアウトプロセスCOMオブジェクトを使用するアプリケーションがあります。アプリケーションの実行中にユーザーがWindowsにシャットダウンするように指示すると、すべてのアプリケーション(トップレベルウィンドウ)にシャットダウン通知が送信されますが、OoP COMオブジェクトは、親に通知される前にシャットダウンでき、正常にシャットダウンする機会があります。さまざまなコンポーネントのさまざまなエラー。

これは、不安定なサードパーティオブジェクトをホストするためにOoPオブジェクトの1つが作成されたため、さらに悪化します。そのため、クラッシュすると自動的に再起動され、Windowsのシャットダウン時に再起動に失敗します。

親プロセスのエラーを処理することはできますが、ActiveXホストがWindowsに「まだシャットダウンしていませんが、やがてシャットダウンします」と通知する方法はありますか、またはさらに良いことに、Windowsがそれらに通知しないようにする方法はありますか?そもそも?

親プロセス、OoPオブジェクト、およびそれらのホストの両方が、C++とVB6の混合物です。

0 投票する
0 に答える
530 参照

c# - C# からの ActiveX コントロールのプロセス外ロード

32 ビット COM (ActiveX) DLL からコンポーネント (および関連するヘルパー関数) を読み込む C# アプリがあります。

これはすべてうまく機能しますが、私の処理はメモリをかなり消費します (特にマルチ プロセッサ マシンで実行する場合)。そのため、ActiveX DLL をプロセス外でロードできるようにしたいと考えています。これにより、64 ビット アプリケーションから直接 DCOM を介してすべての機能にアクセスできるようになることを理解しています (私の COM はかなり錆びていますが)。

ただし、VS2010 で DLL をアウトプロセスでロードできるようにする方法はないようです。必要なグルー コードを自動的に生成し、CLSCTX_INPROC_SERVER を使用した CoCreateInstance と同等のものを介してロードするようです。CLSCTX_LOCAL_SERVER としてロードするように指示する方法はありますか (これは、独自のプロセスで開始されると思います)。

32 ビット DLL をラップする独自のラッパー DLL/EXE を記述し、そのラッパーをアウトプロセス サーバーとしてロードできるようにする唯一の方法はありますか? これを行うことの苦痛は、おそらく、非常に単純な方法で機能を使用できないことです.

きっともっと簡単な方法がありますか?

どんな助けでも大歓迎です!