0

.NET 4.0(C#)で完全に開発された3層アプリケーションがあります。エンタープライズアプリケーションサーバーとして、COM + 1.5を使用します(少しレガシーだと思います...)。サーバー部分とクライアント部分の両方がC#for.NET4.0で開発されています。

サーバー部分は、ServicedComponentクラスを継承し、「Serializable」属性を実装するオブジェクトを返すサービスを公開します。クライアントは、コンポーネントのCOM+エクスポートプロキシを介してリモートクラスを呼び出します。ClickOnceを介してクライアントアプリを配布し、管理者権限で、COM+で生成されたプロキシをすべてのクライアントマシンにインストールする必要があります。これが悪い点です。

そのため、このプロキシのインストールを排除できる他の手法を評価しようとしていますが、これを行う方法はそれほど明確ではありません。同じCOM+部分を使用し、何らかの方法でプロキシをクライアント側のコードに含めることができる、影響の少ない方法を見つけたいと思います。

クライアント部分でこのようなコードを使用しようとしましたが、それでもCOM登録が必要です。

Type comObjectType = Type.GetTypeFromProgID("SumNameSpace.SumClass", "servercomplus", true);
SumInterface comObject = Activator.CreateInstance(comObjectType) as SumInterface;

クライアント部分で代わりにインターフェイスを使用するとクラスが機能する必要があると考えましたが、例外があります。

Runtime.InteropServices.COMException (0x800401F3): Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))

このエラーは、Windowsレジストリにインターフェイスに関する正しい情報がない場合に発生するはずですが、わかりません...

何か案が?

どうもありがとう

4

2 に答える 2

2

すべてのクライアントマシンにCOM+プロキシをインストールする必要があり、プロキシインストールパッケージを使用してインストールする必要があることは間違いありません。発生するエラーは、レジストリのHKEY_CLASSES_ROOTハイブの下にProgIDエントリがないために発生します。このレジストリエントリは、特に、インストールパッケージによって提供されます。プロキシインストーラーが提供するのはこれだけではありません。私はここでかなり良い概要を見つけました。

あなたが本当に探しているのは、ClickOnce配置用のカスタムアプリケーションマニフェストを作成することのようです。これにより、プロキシインストーラーをブートストラップの前提条件としてClickOnce配置にバンドルできるようになります。ただし、インストールには引き続き管理者権限が必要です。それを回避する方法がわかりません(以下の注を参照)。これは、StackoverflowユーザーのGregJackmanによって作成されたClickOnceマニフェストで動作するツールへのリンクです。私はこれについての経験はありませんが、Gregの投稿に基づくと、それはあなたに役立つかもしれないようです。

最後に、昇格されていないユーザーとしてインストールパッケージを実行する方法を見つけたとしても、それは実行したくありません。昇格せずに実行すると、パッケージがレジストリと対話する方法が変わります。短編小説、それは黙って失敗します。

于 2012-05-10T05:49:09.977 に答える
1

グループポリシーを使用してコンポーネントを配布しますか?

于 2012-05-04T10:17:12.983 に答える