写点什么

使用 Visual Studio 2010 和 WiX 3.0 开发托管自定义操作

  • 2009 年 2 月 16 日
  • 本文字数:1368 字

    阅读完需:约 4 分钟

InfoQ 之前曾报道过,Visual Studio 2010 将会配备 WiX 3.0。相对于当前使用的 Visual Studio 安装项目,Wix 更加灵活。而且它支持托管代码和 Windows Installer 进行交互。程序员可以使用 C#、VB.NET 或其他任何.NET 编程语言。它也支持调试,这个曾让安装创建者头痛的问题。

通过 WiX 的发布工具基础 (Deployment Tools Foundation,DTF) 来支持托管自定义操作 (CA’s),开发人员不再需要使用 C++ 或者脚本语言(VB Script 或 JavaScrip)编写 CA’s。DTF 可以使用 msi.dll 中的托管.NET 包装,让用户访问完整的 MSI API。用 C#编写的 CA 方法如下所示:

复制代码
[CustomAction]
public static ActionResult CustomActionName(Session session)
{
...
}

CustomAction 特性用于标识该方法为 CA。Session 对象让开发人员访问 Windows Installer API,它可以查询 MSI 数据库、访问属性等等。这和过去用脚本和 C++ 代码编写的 CA’s 非常类似。

要在 WiX 中使用前面的 CA,必须注册 WiX 项目,代码如下所示:

复制代码
<CustomAction Id="someID" BinaryKey="someKey" DllEntry="customActionName" Execute="immediate"  Return="check" />
<Binary Id="someKey" SourceFile="someCustomAction.CA.dll" />

UISequence 中执行 CA,如下所示:

复制代码
<InstallUISequence>
<Custom Action="someID" After="CostFinalize" Overridable="yes">NOT Installed</Custom>
</InstallUISequence>

WiX 3.0 也给所有的 WiX 用户提供系列默认操作,事实上它们都是 CA’s。下面列举部分可用的默认操作:

  • IIS
  • Com+
  • MSMQ
  • SQL

WiX 3.0 文档中有详细的信息。

下面的例子显示了 IIS 中创建新 Web 站点的 Wix 源代码:

复制代码
<iis:WebSite Id='DefaultWebSite' Description='Default Web Site'>
<iis:WebAddress Id='AllUnassigned' Port='80' />
</iis:WebSite>

很多开发人员都询问 Windows Installer 团队为什么不支持托管自定义操作。Wix 的开发组长 Rob Mensching 解释道:

一年前,我、Carolyn (MSI Dev 经理) 和两位 Windows 架构师讨论过托管代码自定义操作,并把最终的结果发布到博客上。博文提出了两个问题。第一个是技术问题,即托管代码自定义操作需要运行在单独的线程中。第二个问题是 Windows 平台制定了减少自定义操作的战略目标。我发布那篇博文的时候,DTF 就是面临着这两个问题。发布博文的一个月以后,Jason 解决了当中的技术难题,通过实现进程间通讯机制把托管自定义操作转移到单独的进程中,但仍可以和 Windows Installer 通讯。

2009 版的 InstallShield 也支持自定义托管操作,针对Rob 提出的两个问题有着不同的解决方案,但是不支持调试。Christopher Painter 谈到他认为 DTF 更好用的原因

  1. 通过合适的 CLR 版本,DTF 解决了分离 msi 进程的难题
  2. MakeSfxCa 在依赖性方面更加灵活和直观
  3. 从 C#开发人员的角度来说,MSI 互操作对象模型更好用
  4. 可对主进程进行调试
  5. 开发源代码更易于发现问题和解决问题,尽管需要我们自己动手
  6. 没有使用上的限制。它有多种使用方式,我们可以建立和使用自定义操作,包括集成到 InstallShield(这正是我在尝试的方式)。

WiX 3.0 即将发布。当前仍需修正一些Bug ,同时等待Visual Studio 小组以便和Visual Studio 的附加程序Votive 进行集成。最新的版本是3.0.5006.0,我们也可以下载每周编译版本

查看英文原文: Managed Custom Actions with Visual Studio 2010 and WiX 3.0

2009 年 2 月 16 日 01:071657
用户头像

发布了 87 篇内容, 共 18.6 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

GitHub上火了这份堪称神级的SpringBoot手册,竟出自滴滴之手

Java~~~

Java 架构 面试 微服务 Spring Boot

JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

Summer

Java 学习 程序员 架构 jdk

网络攻防学习笔记 Day104

穿过生命散发芬芳

态势感知 网络攻防 8月日更

使用Golang上传文件到MinIO对象存储(一)

liuzhen007

8月日更

让GitHub炸锅的深入理解MySQL实战手册,竟出自阿里云“藏经阁”

Java~~~

Java MySQL 数据库 架构 面试

了,来了!Nacos 2.0的Spring Boot Starter终于来了

Summer

Java 学习 程序员 架构 springboot

Linux之telnet命令

入门小站

Linux

阿里首本凤凰架构竟要付费,构建大型分布式系统的指南这么宝贵吗

Java~~~

Java 架构 面试 分布式 高并发

红黑树的理解与 Java 实现

编程菌

Java 编程 程序员 计算机 技术宅

Web框架Gin | Gin 路由

xcbeyond

Go 语言 路由 gin 8月日更

与外部系统的读写交互(八)

数据与智能

flink kafka Cassandra

360搜索宣布下线“明星人气排行榜”:饭圈文化不是洪水猛兽

石头IT视角

占楼

IT蜗壳-Tango

8月日更

百度程序员:面试官看过我的博客,所以没敢问我多线程

今晚早点睡

Java 百度 程序员 面试 计算机

前端之算法(三)归并排序

Augus

数据结构与算法 8月日更

SQL的执行计划-->explain

卢卡多多

sql 8月日更

你的孩子爱读书吗

箭上有毒

8月日更

面向用户的产品进度汇报会

boshi

项目管理 客户

Django QuerySet 就学那么一点点,一点点就够了

梦想橡皮擦

8月日更

QDS06 Iperf 测网速

耳东@Erdong

8月日更 qds iperf

腾讯三面:哨兵挂了,Redis还能正常工作吗?

Summer

Java redis 学习 程序员 架构

终于有人把操作系统、网络系统、线程进程、IO模型全部总结出来了

Java~~~

Java 架构 面试 TCP 网络

腾讯三面落马+拒网易、CVTE后,字节四面成功拿下offer

编程菌

Java 编程 程序员 面试 计算机

ReentrantLock 中的 4 个坑!

王磊

Java 并发 lock 8月日更

架构实战营毕业总结

9527

#架构实战营

在科技圈流行的冥想,为什么没有全民推广?

脑极体

【前端 · 面试 】JavaScript 之你不一定会的基础题(二)

编程三昧

JavaScript 面试 大前端 事件 8月日更

干货分享!通过Dapr快速落地DDD,实现高并发

云原生开发者社区

出自清华大神之手的JVM实战手册,刚上架GitHub点赞就达到85k

Java~~~

Java 架构 面试 JVM 多线程

爆赞!GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

Java~~~

Java 架构 面试 IDEA 架构师

低耦合、高内聚?

escray

学习 极客时间 如何落地业务建模 8月日更

使用Visual Studio 2010和WiX 3.0开发托管自定义操作_.NET_Jon Arild Tørresdal_InfoQ精选文章