我试图使用InstallShield对我们的产品进行主要升级。只要用户没有选择将其安装到自定义位置,它就可以正常工作。如果他们这样做了,我可以找到我创建的用于备份和恢复用户设置(.Net配置文件条目)的代码,因为自定义操作正在查找默认位置。它不知道原始安装的位置。卸载程序能够从该安装中发现INSTALLDIR并将其卸载。 FindRelatedProducts显示:查找以前安装的版本的INSTALLDIR
FindRelatedProducts: Found application: {E881D894-B624-4B8B-8A02-36E2425E3928}
但是,我找不到任何地方的关键比专有的注册表位置下的其他,那里是没有什么用处:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield Uninstall Information\{E881D894-B624-4B8B-8A02-36E2425E3928}
的E881D...
是安装我的产品代码正在升级。我无法在任何地方找到升级代码,按照该顺序或使用MS编码/打包格式。
在我看来,似乎能够找到您正在升级的软件包的安装位置应该是一个非常基本的功能,因为人们会期望在升级应用程序时用户可能希望将它放回到同一个地方。显然,这些信息在某处可用,因为ARP和升级安装程序能够成功删除该应用程序。
此外,是否有任何方法来在主要升级期间从原始安装访问SecureCustomProperties的值?我很确定我知道答案...
谢谢。我喜欢ARP解决方案,即使它是,恕我直言,过分令人费解。对于安装者而言,我从来没有想到,这种基本的功能不会由MSI自动完成。我不期望它在IS中是我20多年来使用的最大的POS软件。这就是使用Lotus Notes的原因。)我很遗憾没有从一开始就学习WiX的“热门”。我现在当然不得不采取组件搜索的方法,但我会为将来修复这个安装程序。 –
所以我需要部分收回我以前的评论。看起来InstallShield _does_实际上具有设置ARPINSTALLLOCATION的自定义动作类型51。我通过尝试添加自己的名为SetARPINSTALLLOCATION的工具发现了这一事实,恰巧它恰好与我们选择的名称相同。因为它不像他们记录它或任何东西(继续搜索“InstallShield APRINSTALLLOCATION”)。或者提供了一个使用它的方法。典型的半分析IS实现。 –