登録無料(Regfree)COM
-
03-07-2019 - |
質問
当社では、COM オブジェクト自動化モデルを使用して、お客様がアプリケーションを利用できるようにしています。
彼らは、アプリケーションインターフェイスにアクセスするためにほとんどの部分にPythonを使用しています。
アプリケーションの異なるバージョンをインストールできるようにしたいため (まだ実行されていませんが、これは別の問題です)、COM コンポーネントを regfree になるように変更しています。
ただし、レジストリ内のエントリが必要なため、IDispatch オートメーションを介したスクリプト言語からのアクセスと競合します。
私たちのアプローチは、実際のアプリケーションのアクティブなバージョンを管理するアプリケーションを作成することです。ユーザーはどのバージョンを使用するかを決定でき、レジストリ エントリは自動的に処理されます。
私たちのアプローチに代わるものは何でしょうか?
解決
COM にはこれを行うためのプロトコルがあります。インターフェイスのバージョンを設定する(およびバージョンごとに GUIDS を変更する)場合は、複数のバージョンをインストールできます。MicrosoftはこれをWORDなどで行っています。
ライブラリのバージョン 5 に固有の Word.Document.5 クラスを作成することも、マシン上に存在する最上位のインスタンスを作成する word.Document だけを作成することもできます。この機能が COM に組み込まれているのか、実装する必要があるのかはわかりませんが、検討する価値はあります。
他のヒント
Regfree COMオブジェクトには、 Microsoftからアクセスできます。 Windows.ActCtx オブジェクト。
レジストリへのエントリを必要とするIDispatchオートメーションについては、厳密には正しくありません。デフォルトのATL実装であるIDispatchImplを使用していると思います。 nofollow noreferrer">方法の「>コンテキストアクティベーションAPIのアクティブ化」ここに提案されたすべてのエントリポイントをDLLにラップし、アクティベーションコンテキストのアクティベーション/アクティベーション解除を行います。
まあ答えは自分で提案されています。 COMコンポーネントのすべてのバージョンの完全なリストを持つアプリケーションを作成できます。ユーザーがバージョンを選択したら、regsvr32アプリケーションを呼び出してその特定のバージョンを登録できます。