是否有可能告诉Innosetup卸载32位版本的应用程序(通常位于Program Files (x86)
)以安装64位版本的应用程序(通常在Program Files
中) 。如果没有卸载32位版本,那么它们的bot将在启动时启动,从而导致问题。
我不知道是否有这样的程序。鉴于64位应用程序基本上是一个不同的应用程序,尝试卸载32位应用程序似乎试图卸载一个不相关的应用程序。
动机将是越来越少的供应商提供对32位库的支持。例如,msvc2017的Qt没有32位库。所以我越早移动到64位就越好。
注意:如果在Innosetup中无法做到这一点,欢迎任何其他选择。
答案 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;
}
文件夹的默认安装路径。