我正在尝试从InstallShield迁移到Inno Setup。我已经完成了所有设置,但是当用户可能从Inno Setup降级到InstallShield时,我遇到了一个单一的问题。我需要InstallShield来使安装失败或至少警告用户首先手动卸载Inno Setup版本(否则,我安装了两个版本,事情变得一团糟)。
我当然不能以任何方式更改现有的InstallShield安装程序,因为它们已经发布。解决方案必须来自Inno Setup。任何想法如何做到这一点?我知道这可能对我来说是不可能的。
好,我解决了。(有点儿)
有一个简单的技巧可以使InstallShield认为它已经安装(即使尚未安装)也可以做。
首先,您需要找到通常由InstallShield创建的带有UpgradeCode和ProductCode的所有注册表项(对于UC应该是3个条目,对于PC应该是5个条目)。还要注意,两个GUIDS都以相反的形式存储在注册表中(前8个字符是向后的!!-其余我不确定,但是可以用谷歌搜索)。
现在,您需要使InnoSetup重新创建此注册表项。当InstallShield启动时,它将在注册表中查找现有版本,如果找到该版本,则尝试使用原始安装程序的副本将其卸载-副本的路径存储在注册表中,网址为
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ S-1-5-18 \ Products {产品代码的反向向导} \ InstallProperties]
“ LocalPackage” =“ C:\ Windows \ Installer \ [随机字符串] .msi”
如果InstallShield找不到此文件,它将失败。您也可以创建自己的MSI文件,该文件将从InnoSetup中调用uninstall.exe文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句