【问题标题】:Can a Windows Installer perform logic like a normal applicationWindows 安装程序可以像普通应用程序一样执行逻辑吗
【发布时间】:2012-04-29 02:40:23
【问题描述】:

Windows Installer 能否像普通应用程序一样执行逻辑?

例如:我正在创建一个安装程序,它将插件文件安装到 C 驱动器上的第 3 方应用程序的目录中。但如果用户使用的是旧版本的 3rd Party Application,目标目录会有所不同。

因此安装程序需要确定 C 盘上的 3rd Party Application 版本。如果它是新版本,我将插件文件安装到 C://Program Files//3rdPartyApplication//,如果它是旧版本,我安装到 C://3rdPartyApplication//

那么 Windows 安装程序可以执行逻辑吗?如果不能,它可以运行可以执行此操作的批处理文件吗?

【问题讨论】:

  • 你在使用 Wix 吗? :wix.sourceforge.net
  • 如果您告诉我如何知道第 3 方应用程序的版本是什么,什么是“旧版本”和什么是“新”,我将向您展示一个批处理文件,它可以做什么你想要的。

标签: c++ winapi batch-file installation windows-installer


【解决方案1】:

“安装程序”只是一个常规应用程序,旨在将其内容解压到个人硬盘上,并可能执行注册表修改等操作。

例如,如果您使用像 install shield 这样的安装程序,则必须查看该安装程序文档以了解它可以做什么。大多数安装程序应用程序都有某种区域来创建自定义脚本。

你也可以自己搭建,真的不难。

【讨论】:

  • 绝对不建议自己编写安装程序应用程序:它并不像看起来那么简单。你必须关心许多不同的事情,这些事情你可能不会期望发生。这就是为什么建议使用已经过彻底测试的现有安装程序套件的原因。有免费的开源套件以及商业替代品。
【解决方案2】:

是的,安装程序可以像常规应用程序一样执行逻辑。从这个角度来看,安装程序是一个常规应用程序。

您如何编写安装程序逻辑取决于您使用的安装程序套件。要检测应用程序是否存在于C:\Program Files\3rdPartyApplicationC:\3rdPartyApplication 中,您可以使用WiX ToolsetFileSearch 元素,查看Windows Installer 文档:Searching for Existing Applications, Files, Registry Entries or .ini File Entries

custom actions 可以实现更复杂的逻辑。 [自定义操作}(http://msdn.microsoft.com/en-us/library/aa368066.aspx) 可以用 JScript、VBScript、C/C++(DLL 或 EXE;但 EXE 无法与Windows 安装程序会话)。

【讨论】:

    【解决方案3】:

    我想给出不同的观点。 Windows Installer 是一种声明性域特定编程语言。它不是图灵完备的通用编程语言。它并不像任何其他应用程序一样。它可以通过用通用编程语言(如 C++/C#)编写的自定义操作进行扩展,但它仍应遵循相同的声明性方法,将“如何”做某事与“做什么”分开。

    现在回答您问题的第二部分。 Windows Installer 内置了搜索功能。阅读有关 AppSearch 标准操作和相关表(AppSearch、Signature、DrLocator、CompLocator、RegLocator)的 MSDN 主题您还可以对组件设置条件,并且可以动态设置目录目标,所以是的,有一些方法可以做您想做的事情.

    这需要更多信息来准确解释如何做到这一点。

    【讨论】:

      【解决方案4】:

      是的,Windows Installer 可以像普通应用程序一样执行逻辑。

      您可以按照 Alexey 的建议使用 WiX 工具集来完成工作。

      如果您想使用注册表项进行检查,可以使用 FileSearch 元素 (http://wix.sourceforge.net/manual-wix3/wix_xsd_filesearch.htm) 检查文件是否存在或使用 RegistrySearch 元素 (http://wix.sourceforge.net/manual-wix2/wix_xsd_registrysearch.htm)。

      或者,如果搜索不像检查文件或注册表那么简单,自定义操作可以让您编写托管或非托管代码(根据您的偏好)来检查安装了哪个版本的第 3 方应用程序.

      根据搜索结果,您可以在运行时更改安装目录。 Type 35 Custom Action 可以让您更改安装目录: http://msdn.microsoft.com/en-us/library/windows/desktop/aa368093%28v=vs.85%29.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        • 2016-04-15
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        相关资源
        最近更新 更多