2016-06-23 7 views
1

InstallShieldからInno Setupに移行しようとしています。私はすべての設定をしていますが、ユーザーがInno SetupからInstallShieldにダウングレードする可能性がある場合には、1つのケースに固執しました。私はInstallShieldがインストールに失敗するか、少なくとも手動でInno Setupのバージョンを手動でアンインストールするように警告します(そうでなければ、2つのバージョンがインストールされ、何かがうんざりします)。Inno Setupが検出されたときにInstallShieldのインストールを停止する

私はもちろん、すでにリリースされているので、既存のInstallShieldインストーラを変更することはできません。ソリューションはInno Setupからのものでなければなりません。どのようにこれを行うことができる任意のアイデア?私はこれが不可能かもしれないと理解しています。

答えて

0

OK私はそれを解決しました。 (種類)

InstallShieldが既にインストールされていると思うようにするためには、簡単にすることができます。

通常、InstallShieldによって通常作成されるUpgradeCodeとProductCode(UCの場合は3エントリ、PCの場合は5エントリ)ですべてのレジストリエントリを検索する必要があります。また、両方のGUIDがレジストリに逆の形式で格納されていることにも注意してください(最初の8文字は後ろにあります - 安心ですが、グーグルで検索できます)。

これで、InnoSetupがこのレジストリエントリを再作成する必要があります。 InstallShieldが起動すると、レジストリ内の既存のバージョンが検索され、元のインストーラのコピーを使用してアンインストールしようとすると、そのコピーへのパスはレジストリに格納されます

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ S-1-5-18 \ Products {製品コードの逆順} \ InstallProperties]

"LocalPackage" = "C:\ Windows \ Installer \ [ランダムな文字列] .msi"

InstallShieldがこのファイルを見つけられなかった場合、それは失敗します。 InnoSetupからuninstall.exeファイルを呼び出す独自のMSIファイルを作成することもできます。

+1

これは非常に悪いことであり、Windows Installerサービスが壊れてしまいます。これらのレジストリエントリはインストーラによって所有されているため、この方法でそれらを操作するべきではありません。 –

0

在庫InstallShieldテンプレートは、自動的にMSIへのダウングレード防止ルールを作成します。 InnoSetupプロジェクトがInstallShieldプロジェクトと同じUpgradeCodeを使用して作成されたと仮定すると、これは自動的に機能するはずです。

新しいInnoSetupプロジェクトに新しいUpgradeCode GUIDを与え、アップグレードテーブルの古いGUIを使用してレガシー製品タイプルールを削除すると、実際にInstallShieldが実行できる可能性はあまりありません。それはインストーラの性質です...出荷されると出荷されます。

+0

InnoセットアップはWindows Installer/MSIを使用しないため、ここではGUIDは関係ありません。 –

+0

ああ、その場合、すべてが失われます。 –

+0

はいInnoSetupは.exeを作成していて、アップグレードコードは使用しません – Safiron

0

これはできないと思います。 Inno SetupはWindowsインストーラを使用しないため、InstallShieldはあなたの製品が既にインストールされていることさえ知りません。 Inno Setupのアンインストーラは、InstallShieldインストーラが起動していることを知ることができません。

あなたができることは、Inno SetupインストーラーにInstallShieldインストールを削除させて、別のフォルダーにインストールすることです。したがって、InstallShieldのインストールを再インストールすると、少なくともInno Setupのインストールと競合することはありません。また、必要に応じて、ユーザーは新しいInno Setupのインストールを正しくアンインストールできます。

+0

Crazy thought ...古いInstallShieldインストーラのUpgradeCodeを持つプログラムの追加と削除に表示されない偽のMSIがあります。その後、innosetupを静かにインストールして、それを静かにアンインストールして、古いMSIのブロッキングマーカーにしてください。それはうまくいくはずです。それは私がやることではないと言っていました.... –

+0

1)「サイレントアンインストール」とは、「イノセットアップアンインストーラによるアンインストール」を意味しますか? 2)だから偽のMSIは古いMSIの新しいバージョンのように見えるだろうか? –

+0

これはいい考えです。 –

関連する問題