問題タブ [running-object-table]
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.
c# - ランニング オブジェクト テーブルへのアクセスに関する問題
私のプログラムでは、Running Object Table (ROT) を使用して、プログラムのインスタンスが 1 つだけ実行されるようにしています。私は残念ながら会社を去った開発者からそのコードを「継承」しているため、問題を解決するのは貧しい人です。コードは問題なく動作しますが、39,000 のうち 3 人の顧客がAccessDeniedException
. すべての顧客は、ユーザー モードでソフトウェアを実行します。
何が間違っている可能性がありますか?
編集: ROTにオブジェクトを登録するために要求されたコードは次のとおりです。
編集2:
まず、すべての調査員にとって大きな言い訳です。AccessDeniedException は発生しません。これは System.UnauthorizedAccessException (HRESULT: 0x80070005 (E_ACCESSDENIED)) です。
次に、「調査者」ケン・ブリテンの質問に対する回答: - SharePointは混同されていません- ROT から正しいオブジェクトを要求することを確信しています - もう 1 つのヒントは、おそらく 3 つの問題のうちの 1 つ (39,000 が正常に動作していること以外) が実行されていることです。 WTS (Windows ターミナル サーバー) 上のアプリ
編集3:
これらの例外の 1 つのスタック トレースを次に示します。
残りのスタック トレースはコード内にあります。この場合、RunningObjectTableClientManager のコンストラクターで例外が発生することは注目に値します。そのコンストラクタのコードは次のとおりです。
c# - Wordインスタンスを実行中のオブジェクトテーブルにプログラムで登録する方法は?
これは重複の可能性があります。正確なものを見つけることができませんでした。かなり前に経験したことを覚えています。
このツールには、コンピューターから任意の場所で MS Word ファイルが開かれているかどうかを検出する機能が必要です。そこで、次のようにプロセス ウォッチャーを使用します。
それが何であれ、ここでトリッキーな部分があります。現在開いている WINWORD プロセスのワード オートメーション インスタンスを取得する必要があります。Marshal.GetActiveObject
そのため、実行中のインスタンスを取得するために使用します。ただし、開いている Word アプリケーションは、実行中のオブジェクト テーブルに登録されるのは、単語アプリがフォーカスを失った場合のみです (msdn で文書化されているように)。プロセスがある場合、ROT に単語アプリケーションを手動で登録するにはどうすればよいですか? 以下の擬似コード
注:いくつかの重いAPI呼び出しを使用して、開いている単語ウィンドウからプログラムでフォーカスを強制的に離してから戻すことができますが、それは完全な混乱です。
通常の登録方法はありますか?
c# - C# を使用した ROT での COM オブジェクトへの強い参照の作成
実行中の COM インスタンスにバインドする必要があります (探しているもののインスタンスが多数存在する可能性があるため、実行中のオブジェクト テーブルを調べてどれが適切かを判断する必要があります) CoClassCreate またはnew
クラスでの演算子を使用すると、私には選択肢がありません。
私が持っているコードは、例外セーフではないことを除いて、ほとんど機能します。
Revoke
以下のコードのように例外がスローされた場合、舞台裏で発生する自動を回避する方法はありますか? アプリケーションが終了すると、それを登録したアプリケーションがまだ実行されている間に、COM オブジェクトは ROT から削除されます。Release() が自動的に呼び出され、それが COM を参照する最後のオブジェクトであったため、ROT エントリが消えていることは確かです。
アトミックで例外セーフな方法で、ROT 内のオブジェクトへの強い参照を取得したいと考えています。
メソッドと組み合わせてモニカを使用しようとする試みはすべてBindToObject
失敗しました。.NET 4.0 での実装に問題はありますか? 最初の呼び出しは機能しているように見えますが、IUnknown の Guid を使用している場合でも、後続の呼び出しはすべて Argument または invalidCast 例外で失敗します。私の知る限り、これは常に成功するはずですか、それとも何かを見落としていますか?
これは、これまでに作成できた最高の作業コードです。例外の安全性が恋しいだけです。このプログラムは、単独で実行することを意図しており、割り込み可能です (例外をスローして、いつでもトレッドを中断できます)。この未完の仕事を放っておくと、きれいに解決できなければ、確かに問題が発生します。
追記: これは、OutProc サーバーがアクティブなオブジェクトを弱参照のみとして登録した場合に発生する可能性があります。私はこれに影響を与えません。私はサーバー側の作成者ではありません...オブジェクトが実行中のオブジェクトテーブルから取り消されるリスクを冒さずに、実行中のオブジェクトにバインドする必要があります。
mfc - オブジェクトを ROT に配置する方法
このリンクをたどりましたhttp://blogs.artinsoft.net/Mrojas/archive/2011/09/30/Running-Object-Table-and-NET.aspx 知りたいのですが、MFC オブジェクトを RunningObjectTable に配置できるかどうか. はいの場合、どうすればそれができますか。
ここで私を助けてください。
python - Iron Python を使用した OLE 登録データベース アクセス
comtypes モジュールを使用してアクティブなオブジェクトを抽出しようとしています:
ただし、少なくとも1つの引数が必要であるというエラーがスローされます。OLE 登録データベース キーだと思いますが、それを抽出する方法がわかりません。アクティブなオブジェクトを取得できるように、現在登録されているアプリケーションを検索し、それらのキー/名前を照会する方法はありますか?
ありがとう!
c# - ROT (Running Objects Table) にアイテムを追加する
*****.GetActiveObject(ProgId) の使用方法は知っていますが、問題は、このコード行を使用するいくつかのアプリケーションが ROT に追加されないことです。既に開いている場合でも、HRESULT エラーが発生します。 . ただし、別のアプリケーションをクリックしてから元のアプリケーションに戻ると、コード行は正常に機能します。
これをあいまいなままにしている理由は、これが 10 以上のアプリケーションで発生している問題だからです。
私がコードを投稿しない理由は、この問題がコードベースであるとは考えていないためです。むしろ、この問題は私の単純な理解不足によるものだと考えています。
この問題が発生している最も重要なプログラムの 1 つは "Microsoft Excel" です。私がやりたいのは、特定のセルでユーザーを開始できることだけです。
Excel で *****.GetActiveObject(ProgId) を使用する方法について適切な説明を探しましたが、合理的な答えはないようです。プログラムは c# で記述できますが、Visual Basic の方が簡単であれば問題ありません。
c# - Running Object Table ビューアーの C# ソースを入手した人はいますか?
ここで自分の質問に答えます。
Running Object Table (ROT) は Microsoft Component Object Model (COM) アーティファクトであり、Excel および Word ドキュメントを登録して、マシン上の他のアプリケーションからアクセスできるようにします。したがって、ROT はオブジェクトの埋め込みとリンク (OLE) とプロセス間通信 (IPC) を容易にします。
ROTViewer.exe と呼ばれるプログラムが Visual Basic 6 時代から存在し、開発者が ROT の内容を確認することができました。驚くべきことに、ROTViewer に相当する C# リストを StackOverflow (SO) に投稿した人は誰もいません。
ソースを手に入れた人はいますか?