1

我正在尝试从“启动条件”中的条件访问 TargetPlatform 属性值(您可以在部署项目中设置)。

基本上,如果该计算机上安装了 64 位版本的 Office,我试图告诉应用程序不要将自身安装为 32 位应用程序。因此,我需要以某种方式获取应用程序的位数并将其置于启动状态。

我可以从注册表中获取 Office 的位数,但我不知道如何从安装程序访问 TargetPlatform。

谢谢!

4

3 回答 3

2

这里有两个链接:

从上面的链接中,您可以推断出您不能从 MSI 安装程序同时针对这两个平台。您将需要有两个安装程序。根据安装程序的构建方式,x86 或 x64 将取决于安装程序解释一些常量的方式,这些常量告诉在哪里安装文件 - Program FilesProgram Files (x86)

您不能在运行时更改安装程序的 TargetPlatform。

您可以做的可能是将两个安装程序打包到第三个安装程序中,并根据安装的 Office 版本,您说您可以获得运行子安装程序 x86 或子安装程序 x64,这将实际安装应用程序文件。

如果 MSI 安装程序不是最重要的要求,我会选择NSIS。如果不是至少将 MSI 安装程序打包到 NSIS 中。这非常容易。从经验来看,NSIS 比 MSI 酷得多。

于 2010-11-12T13:45:47.910 回答
1

我已经读过这个问题几次了,我不能 100% 确定我理解你想要做什么。您是否有 32 位应用程序,并且您只想安装 32 位 Office(我假设为 2010)安装?如果安装了 64 位 office,您是否也有要安装的 64 位版本?

我不确定您为什么需要关心 TargetPlatform 属性,因为如果您知道安装了 64 位 Office,那么您必须是 64 位操作系统。如果安装了 32 位 Office,您可能是 64 位操作系统,但这真的重要吗?你说你关心 Office 的小众而不是 Windows。

我认为,从我读过的内容来看,如果您有一个 AppSearch 将位数拉入一个属性中,您可以只使用使用该属性的 LaunchCondition 以及“或已安装”(来处理能够卸载您的应用程序如果 Office 是先卸载的),就可以了。

于 2010-11-12T13:21:23.483 回答
1

在安装开始执行检查之前添加自定义操作。使用Installer类执行自定义操作。您可以使用该OnBeforeInstall事件来读取注册表项并根据需要检查位数。抛出异常将导致安装中止,但可能有更简洁的方法来执行此操作。

于 2010-11-19T08:57:19.077 回答