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

时间:2012-04-29 02:40:24

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

Windows Installer可以像普通应用程序一样执行逻辑吗?

例如:我正在创建一个安装程序,将插件文件安装到C盘上的第三方应用程序目录中。但如果用户具有旧版本的第三方应用程序,则目标目录将不同。

因此安装程序需要确定C盘上第三方应用程序的版本。如果它是新版本我将插件文件安装到C:// Program Files // 3rdPartyApplication //如果它是旧的我安装到C:// 3rdPartyApplication //

Windows安装程序是否可以执行逻辑,如果没有,它可以运行可以执行此操作的批处理文件吗?

4 个答案:

答案 0 :(得分:1)

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

如果您使用安装盾牌等安装程序,则必须查看该安装程序文档以了解它可以执行的操作。大多数安装程序应用程序都有某种区域来创建自定义脚本。

你也可以建立自己的,这真的不是很难。

答案 1 :(得分:1)

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

编程安装程序逻辑的方式取决于您使用的安装程序套件。要检测C:\Program Files\3rdPartyApplicationC:\3rdPartyApplication中是否存在应用程序,您可以使用FileSearchWiX Toolset元素,查看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 Installer会话)。

答案 2 :(得分:1)

我想提出一个不同的观点。 Windows Installer是一种声明性域特定编程语言。它不是图灵完整的通用编程语言。它不应该像任何其他应用程序一样。它可以使用通用编程语言(如C ++ / C#)编写的自定义操作进行扩展,但是它应该遵循相同的声明方法,在这里您可以分离“如何”从“做什么”做什么。

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

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

答案 3 :(得分:0)

是的,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)。

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

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