我正在尝试从“启动条件”中的条件访问TargetPlatform属性值(可以在Deployment项目中设置)。
基本上,如果在该计算机上安装了64位版本的Office,我试图告诉应用程序不要将自己安装为32位应用程序。因此,我需要以某种方式获取应用程序的位数并将其置于启动状态。
我可以从注册表中获取Office的一点点,但我不知道如何从安装程序访问TargetPlatform。
谢谢!
答案 0 :(得分:2)
以下是两个链接:
从上面的链接中,您可以推断出您无法从MSI安装程序中定位两个平台。您需要有两个安装程序。根据安装程序的构建方式,x86或x64将取决于安装程序解释某些常量的方式,这些常量告诉文件的位置 - 程序文件或程序文件(x86)
您无法在运行时更改安装程序的TargetPlatform。
你可以做的可能是将两个安装程序打包到第三个安装程序,并根据安装的Office版本,你说你可以获得运行子安装程序x86或子安装程序x64,这将实际安装应用程序文件
如果MSI安装程序不是最重要的要求,我会选择NSIS。如果不是至少将MSI安装程序打包到NSIS安装程序中。它非常容易令人难以置信地。根据经验,NSIS比MSI更酷。
答案 1 :(得分:1)
我现在已经读了几遍这个问题而且我并不是100%肯定我明白你要做什么。你有一个32位应用程序,如果他们安装了32位Office(2010我假设)你只想安装吗?如果安装了64位办公室,您是否还要安装64位版本?
我不确定为什么你需要关心TargetPlatform属性,因为如果你知道安装了64位Office,你必须定义为64位操作系统。如果安装了32位Office,你可能是64位操作系统,但这真的很重要吗?你说过你关心的是Office的不足之处。
我认为,从我读过的内容来看,如果你有一个AppSearch将这个位置拉成一个属性,你可以使用一个使用该属性的LaunchCondition以及“或者已安装”(以处理能够如果首先卸载Office,请卸载您的应用程序,并且没问题。
答案 2 :(得分:1)
在安装开始执行检查之前添加自定义操作。使用Installer类来执行自定义操作。您可以使用OnBeforeInstall
事件来读取注册表项并根据需要检查位数。抛出异常将导致安装中止,但可能有更简洁的方法来执行此操作。