是否可以将脚本嵌入到MSI安装程序包中?

时间:2013-07-08 21:30:59

标签: c# visual-studio-2010 windows-installer jscript

我正在尝试为我的Windows项目创建一个MSI安装程序/卸载程序,包括一个服务,一些用户模式的exes / dll和一些数据文件。我能够使用Visual Studio 2010使用其Setup Project编译MSI包。它适用于安装,但卸载需要一些额外的步骤才能将文件与注册表设置一起删除。

所以我想知道,在删除文件/注册表设置之前,有什么方法可以运行脚本(C#或WSH JScript)吗?

1 个答案:

答案 0 :(得分:2)

是的,您可以将脚本(VBS或JScript)添加到MSI中作为C#或C ++自定义操作,在已编译的MSI启用的Dll中,您可以调用.exe文件等。有一个名为CustomAction的表和自定义操作可以使用序列表对序列进行排序,最重要的是InstallExecuteSequence和InstallUISequence。

我认为使用自定义操作并非易事。如果你有可能问专家,我会考虑的。

大多数情况下,当您想要添加自定义操作以卸载资源时,您的MSI可能有问题。 需要添加的5个自定义操作中的4个不是必需的,但可以使用正确的MSI表条目替换。

通常,我不建议使用Visual Studio安装程序,因为它不会给你很多控制,并且很容易出错,特别是对于升级和更复杂的任务。

但如果您仍想添加自定义操作,这里有一些基本想法: 例如,要启动VB脚本,您可以添加类型为38的自定义操作。在“操作”列中选择一个名称,将“源”列清空,然后在“目标”列中键入VB脚本代码: 例如。有这样的东西你有一个VB“接口”到MSI属性,如新发明的“MYDIR_EXISTS”这里。

on Error Resume Next
set filobj = Createobject( "Scripting.FileSystemObject" )
If filobj.FolderExists("C:\MyDir") Then Session.Property("MYDIR_EXISTS") = "True"
...

如果您使用Visual Studio Installer,则可以考虑在之后使用转换添加自定义操作。这又需要一些MSI知识。

我个人而言,我不会使用脚本文件进行分布式设置,只有当设置是同一家公司的基础设施时才使用。但这是一个起点。 使用自定义操作类型34或50调用已编译的.exe是一种替代方法。