【问题标题】:How can you access the TargetPlatform property in a Launch Condition?如何在启动条件中访问 TargetPlatform 属性?
【发布时间】:2011-05-07 19:19:42
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 您是否在 ProjectInstaller 类的自定义代码中获取 Office 的注册表设置?您不能在那里检查当前平台并在满足您的条件时中止安装吗?

标签: deployment windows-installer launch-condition


【解决方案1】:

这里有两个链接:

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

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

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

如果 MSI 安装程序不是最重要的要求,我会选择 NSIS。如果不是至少将 MSI 安装程序打包到 NSIS 中。这难以置信地简单。 NSIS 比 MSI 酷多了,经验之谈。

【讨论】:

  • 嘿 Liviu,你有我如何将两个安装程序组合成第三个安装程序的链接吗?
  • 这实际上是一个非常复杂的讨论。官方 MSI 只能标记 x86 或 x64,但有一些技术可以创建“混合”安装程序,可以以某些有限的方式同时针对这两种安装程序。更复杂的是,在考虑托管代码和非托管代码以及为 Office 等可以是 32 位或 64 位的应用程序创建插件时......“我是 32 位应用程序还是 64 位应用程序?”的问题。不太容易回答或计划。
  • @Andrei 在仔细观察之后,似乎嵌套的 MSI 包装非常难以实现。所以我会推荐 NSIS。
  • 我一直在嵌套 MSI 软件包安装。只需点击几下 InstallShield 即可进行设置。
  • @Christopher Well InstallShield 可以说是另一种猫。但是将 2 个 MSI 嵌套在另一个不使用 InstallShield 的 MSI 中。对于 IS,您还需要一个非常昂贵的许可证。
【解决方案2】:

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

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

我认为,根据我的阅读,如果您有一个 AppSearch 可以将位数提取到一个属性中,那么您可以只使用使用该属性的 LaunchCondition 以及“或已安装”(来处理能够如果先卸载了 Office,请卸载您的应用程序),然后就可以了。

【讨论】:

  • 克里斯,我的意思是:如果用户有 64 位 Outlook,并且他下载了我的应用程序的 32 位版本,我想立即停止安装。
  • 那我认为你根本不需要 TargetPlatform。您说您有一种检测 64 位 Office 的方法。我可以假设您正在使用 AppSearch 吗?您的资产名称是什么?未安装 Office、安装 32 位 Office 和安装 64 位 Office 时的值是多少?我认为这就是编写 LaunchCondition 所需要关注的全部内容。
  • 您提到您使用的是 Windows Installer,但我无法知道您使用的是 InstallShield、Wise、WiX、Visual Studio 部署项目还是其他。这是一篇不错的博客文章供您阅读blog.deploymentengineering.com/2010/10/…blog.deploymentengineering.com/2010/09/…
  • 我正在使用 Visual Studio 部署项目。当前搜索 Outlook 位数的方法是在注册表中查找:stackoverflow.com/questions/2203980/…
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2021-12-05
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多