2009-03-06 20 views
3

私たちは、COMオブジェクトオートメーションモデルを使用して、お客様がアプリケーションを利用できるようにしています。登録無料(Regfree)COM

私たちのアプリケーションインターフェイスにアクセスするために、ほとんどの場合、Pythonが使用されています。

異なるバージョンのアプリケーションをインストールできるようにするためには、COMコンポーネントをregfreeに変更しています。

しかし、それらはレジストリ内のエントリを必要とするため、スクリプト言語からIDispatchの自動化によるアクセスと競合します。

私たちのアプローチは、実際のアプリケーションのアクティブバージョンを管理するアプリケーションを作成することです。ユーザーはどのバージョンを使用するかを決めることができ、レジストリエントリを処理します。

私たちのアプローチの代替手段は何ですか?

答えて

3

これにはCOM内にプロトコルがあります。インターフェイスのバージョンを変更し(各バージョンのGUIDSを変更する場合)、複数のバージョンをインストールできます。マイクロソフトはWORDなどでこれを行います

ライブラリのバージョン5に固有のWord.Document.5クラスを作成することも、マシン上に存在する最高のインスタンスを作成するword.Documentを作成することもできます。この機能がCOMに組み込まれているのか、それとも義務付けられている必要があるのか​​は分かりませんが、検討する価値はあります。

+0

バージョン管理ソリューションはもちろんいいですが、各バージョンのIDを変更したくないと決めました。また、スクリプトから古いバージョンのアプリケーションにアクセスするという問題は解決しません。 – PsiX

1

よく答えはあなた自身が提案します。すべてのバージョンのCOMコンポーネントの完全な一覧を含むアプリケーションを作成できます。ユーザーがバージョンを選択すると、regsvr32アプリケーションを呼び出して特定のバージョンを登録できます。

3

Regfree COMオブジェクトには、Microsoft.Windows.ActCtxオブジェクトからアクセスできます。

レジストリにエントリを必要とするIDispatchの自動化に関しては、厳密には正しくありません。私はあなたがデフォルトのATL実装、IDispatchImplを使用していると推測します。 このソリューションは、manner suggested hereactivation context manipulation APIsを使用して、すべてのエントリポイントをアクティブ化コンテキストのアクティブ化/非アクティブ化を使用してDLLにラップする、独自の実装IRegFreeDispatchImplを提供することで解決しました。

関連する問題