上のMSI製品コードが見つかりません次のことを考えてみましょう:は、64ビットWindows
私はC#.NETの32ビットのWindowsサービス(対象= x86の、フレームワーク= 4.0)と、対応するセットアッププロジェクトを(作成するためにVS2010を使用.msi)。
私の開発マシンは、32ビットのWidnows XP Professional SP3です。
私は特別な必要性を持っています。プログラムを別の32ビットアプリケーションからプログラムでアンインストールする必要があります。そのために、アンインストールするアプリケーションは、アンインストールを実行するときにインストールされたサービスの製品コードを知っていなければなりません( "msiexec.exe/uninstall"を呼び出せるように)。
これは、サービスの名前と一致するものが見つかるまで、インストールされたコンポーネントのレジストリを介して32ビットのアンインストールアプリケーションを検索し、対応する製品コードを取得することで解決しました。これは非常に簡単で、うまく動作します。
今日私は64ビットWindows 7にサービスをインストールしようとしました。サービスはうまく動作しますが、アンインストールに関しては、32ビットアンインストールアプリケーションはレジストリで製品コードを見つけることができません。これは、32ビットのアンインストーラアプリケーションが、インストール情報が(不明な理由により)元の無指定部分に置かれている間に、レジストリのリダイレクトされた(wow6432node)部分のみを見ることができるからです。
どうすればこの問題が発生しますか?
私は、レジストリのリダイレクト一部にインストール情報を入れてインストーラを強制することはできますか?
私の32ビットアンインストーラアプリケーションから無作為なレジストリ部分にアクセスしてスキャンできますか?
インストール中に何らかの形で製品コードを取得し、別の場所(32ビットアンインストーラからアクセス可能)に保存できますか?
レジストリの検索に関係しない製品コードを取得する別の方法はありますか?
もう1つのアイデア:レジストリを検索して32ビットのアンインストーラアプリケーションから起動する小さな64ビットアプリケーションを作成する必要がありますか? –
64ビットパッケージのみ64ビットレジストリハイブを使用します。 32ビットパッケージはWow6432Nodeに書き込まれます。 64ビットインストーラーを使用していますか? –
私はVS2010の標準セットアッププロジェクトを使用しています。これはx86をターゲットにしています(一番上のインジケータに従って)。なぜそれが64ビットのハイブに書き込むのかも分かりません。 –