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

本文关键字:MSI 安装 程序 包中 脚本 是否 | 更新日期: 2023-09-27 18:21:29

我正试图为我的Windows项目创建一个MSI安装程序/卸载程序,由一个服务、几个用户模式exes/dlls和一些数据文件组成。我能够使用VisualStudio2010使用它的Setup Project编译MSI包。它适用于安装,但在实际删除文件和注册表设置之前,卸载需要一些额外的步骤。

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

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

是的,您也可以在编译的支持MSI的DLL中向MSI添加脚本(VBS或JScript)作为C#或C++自定义操作,您可以调用.exe文件等。有一个名为CustomAction的表,自定义操作可以与序列表一起排序,最重要的是InstallExecuteSequence和InstallUISequence。

我认为使用自定义操作并不是一件容易的事。如果你可以请教专家,我会考虑的

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

一般来说,我不建议使用Visual Studio安装程序,因为它不会给你太多的控制权,而且很容易出错,尤其是对于升级和更复杂的任务。

但如果你仍然想添加自定义操作,这里有一些基本想法:例如,启动VB脚本时,可以添加类型为38的自定义操作。在"Action"列中选择一个名称,让"Source"列为空,并在"Target"列中键入VB脚本代码:例如,有了这样的东西,你就有了一个MSI属性的VB"接口",比如这里新发明的"MYDIR_EXISTS"。

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

如果您使用Visual Studio安装程序,您可以考虑在之后添加带有转换的自定义操作。同样,这需要一些MSI知识。

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