Wix:自定义动作我能走多远
本文关键字:多远 自定义 Wix | 更新日期: 2023-09-27 18:25:38
我想建立一个Wix安装程序,它将检测我的一些程序并更新它们。
我有c#代码(使用另一个DLL)来检查系统上的一些东西,然后我想下载所有应用程序的最新版本的表格,决定我需要更新哪个应用程序,然后下载&更新所选的。
所以我的问题是,Wix能否预成型以下动作:
1)使用c#运行另一个dll调用?
2)从web下载一个文件并对其进行解析(比如说-也使用c#)?
3)转到链接并下载MSI''EXE?
4)安装MSI''EXE(假设在静默模式下运行)?
5)是否从系统中卸载其他旧应用程序?
Windows安装程序有一个互斥对象,每台机器只允许一个执行序列,每个进程只允许1个UI序列。由于此限制,一个MSI无法安装另一个MSI。有一些技巧,但它们没有遵循良好的设计(没有提供适当的提升支持或静默安装/卸载支持)。
您应该谨慎使用自定义操作。一个设计正确的自定义操作应该像Windows安装程序中内置的标准操作一样。这就是尽可能支持事务性安装,并通过自定义表进行数据驱动。
对于你所描述的需要做的事情,一个更好的候选者可能是引导程序/链接器,比如WiX的Burn功能。
1)-肯定是
2) -5)你可以这样做,但你应该将msi与"自定义引导程序"answers"安装后自定义配置管理器"区别开来。一般规则:仅将msi包用于资源(通常是文件;在更复杂的情况下-注册表,在大多数情况下是sql对象)原子部署;将所有其他功能移到msi之外(意味着使用wix-ony构建msi;为引导程序和配置工具创建自定义实用程序;请参阅wix示例如何将三个部分集成在一起)。
1)是的,但请记住,如果您对.NET 3.5有依赖关系,并且您使用的是.NET 4,则您的自定义操作将无法运行。除此之外,您的自定义操作dll将从msi解压缩到%TEMP%文件夹中。如果您对未存储在GAC中的其他dll有任何依赖关系,则将无法加载。如果你引入了另一个例如C++dll,你必须将其作为资源嵌入到你的C#dll中,并将其解压缩以找到它。
2) 你可以做任何你有权利做的事。
3) 确定
4) 一次只能运行一个MSI安装。您必须派生一些子进程,以等待当前安装结束。
5) 是的,当然。最简单的方法是在msi中添加一个升级表,只需卸载任何具有此升级代码的软件。这是唯一允许同时激活两个msi的操作。查看RemoveExistingProducts操作的InstallExecute Sequence表。