私の質問は、これのレプリカではないにしても、非常に似ています。腹立たしいことに、「答え」は私に多くの仕事を与えてくれず、率直に言って、私は途方にくれています。
問題はかなり明白なはずです。Managed AddIn Framework を使用せずに、プラグ可能なアプリケーション フレームワークのプロセス間で WPF 要素を渡したいと考えています。アクセス許可が非常に制限されているため、ファイルをディスクにキャッシュして制御できない環境にデプロイします。アドイン ルートを appdata に配置するという回避策がありますが、強制されたディレクトリ構造は望ましくなく、私が知る限り、それはそのフォルダの目的ではありません。
除外方法は次のとおりです。除外行は太字で強調表示されています。
デリゲート void AddUIElementDelegate(クライアント クライアント、System.AddIn.Contract.INativeHandleContract ハンドル);
private void AddUIElement(クライアント クライアント、System.AddIn.Contract.INativeHandleContract ハンドル)
{
if (this.Dispatcher.CheckAccess())
{
var element = System.AddIn.Pipeline.FrameworkElementAdapters.ContractToViewAdapter(ハンドル);
m_UIElements[クライアント] = 要素;
StackPanel_PluginUIHost.Children.Add(m_UIElements[クライアント]);
}
そうしないと
{
this.Dispatcher.BeginInvoke(新しい AddUIElementDelegate(AddUIElement), クライアント, ハンドル);
}
}
実験では、STA スレッドでFrameworkElementAdapters.ContractToViewAdapter()を介してハンドルをアンマーシャリングする必要があるように思われた ため、呼び出しが行われました。clientはコールバックMarshalByRefObjectであり、プロキシを介してこのメソッドでアクセスされることに注意してください。ハンドルは、 FrameworkElementAdapters.ViewToContractAdapter()への呼び出しでリモートでも作成され、リモート メソッドの戻り値としてこのアプリケーション ドメインに渡されます。
私が受け取った例外はRemotingException occured - Permission denied: cannot call non-public or static methods です。
フィードバックは大歓迎です。