質問

当社製品には、2つのCOM公開クラスClassAおよびClassBを備えたVC ++ ATLインプロセスCOMサーバーが含まれています。このCOMサーバーは、Install Shield 2008インストーラーパッケージと「ビルド時のCOM抽出」に追加されます。プロパティがコンポーネントに設定されます。

ClassAとClassBはコンポーネントによってまったく同じ方法で公開されます-それぞれに.rgsファイルがあり、両方の.rgsファイルがコンポーネントリソースにコンパイルされ、両方に対してCAtlModule :: UpdateRegistryFromResourceS()が呼び出されます。

ただし、COMサーバーでregsvr32を実行すると、両方のクラスがレジストリに正しく公開されますが、パッケージのインストールを実行すると、そのうちの1つだけがInstall Shieldによって公開されます。

Install Shieldは、レジストリへの変更をどのようにして検出しますか?問題の原因を検出するために何を確認する必要がありますか?

役に立ちましたか?

解決

RegOverridePredefKey を使用していると思われます(少なくとも、MSDNからのヒントが必要です)。 http://msdn.microsoft.com/en-us /library/ms724901(VS.85).aspx

ターゲットキーがプライベートな場所に上書きされた後、InstallShieldはレジストリ構造を解析し、そのスクリプトを生成できます。

これはすべて推測ですが、InstallShieldの実際の動作はわかりませんが、 RegMon InstallShieldのビルドの実行中に、登録の場所を識別できるかどうかを確認し、それが何が間違っているかを見つけようとします。

他のヒント

詳細な説明が必要な場合(または許可されている限り)、InstallShieldコミュニティフォーラムにアクセスして、InstallShieldの従業員MichalUに質問を投稿してください。 Heatにはcom情報を抽出する機能があるため、これらの機能がどのように機能するかを一般的に知りたい場合は、WiXのソースコードを確認できます。

ビルド時のCOM抽出で問題が発生した場合は、それをオフにしてCOMデータを静的に挿入できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top