卸载32位应用程序并安装64位应用程序

时间:2017-07-10 07:49:09

标签: inno-setup

是否有可能告诉Innosetup卸载32位版本的应用程序(通常位于Program Files (x86))以安装64位版本的应用程序(通常在Program Files中) 。如果没有卸载32位版本,那么它们的bot将在启动时启动,从而导致问题。

我不知道是否有这样的程序。鉴于64位应用程序基本上是一个不同的应用程序,尝试卸载32位应用程序似乎试图卸载一个不相关的应用程序。

动机将是越来越少的供应商提供对32位库的支持。例如,msvc2017的Qt没有32位库。所以我越早移动到64位就越好。

注意:如果在Innosetup中无法做到这一点,欢迎任何其他选择。

1 个答案:

答案 0 :(得分:0)

只需卸载以前的32位版本,就像其他任何版本一样。

请参阅How to detect old installation and offer removal?

只要32位和64位版本的安装程序具有相同的AppId,它就应该几乎开箱即用。唯一不同的是,您需要在HKLM32(32位配置单元)而不是HKLM / HKEY_LOCAL_MACHINE中显式查找卸载密钥(默认为Program Files中的64位配置单元{3}})。

如果你已经从64-bit install mode卸载了32位版本,正如上面提到的问题的答案所示,Inno Setup并没有注意到32位版本曾经存在过,甚至会#&# 34;复位&#34; 64位 private static bool sourceDomainIsAllowed(ActionExecutingContext filterContext, List<string> allowedDomains) { var request = filterContext?.RequestContext?.HttpContext?.Request; var referrerHost = request?.UrlReferrer?.Host; var originKey = request?.Headers.AllKeys.FirstOrDefault(k => k.EqualsIgnoreCase("Origin")); if (!string.IsNullOrWhiteSpace(referrerHost)) { return allowedDomains.Contains(referrerHost); } else if (!string.IsNullOrWhiteSpace(originKey)) { var origin = request.Headers[originKey]; var uri = new Uri(origin); return allowedDomains.Contains(uri.Host); } return false; } 文件夹的默认安装路径。