从 Visual Studio 安装项目的自定义操作调用 JavaScript






4.20/5 (5投票s)
当您使用 Visual Studio 创建安装项目时,您可以使用自定义操作在基本安装完成后执行额外的处理。本文介绍了如何让自定义操作执行一些 JavaScript,并向其传递一些参数。
引言
我最近被要求为一个项目制作一个简单的安装程序。唯一可用的安装编译器就是 Visual Studio 自带的那个。虽然功能有限,但它似乎提供了我们所需的大部分功能。任何我们需要的额外工作都应该可以通过“自定义操作”功能来实现。
自定义操作允许在基本安装完成后执行额外的处理。现有的示例大多展示了如何调用您在编译后的 DLL 中提供的自定义操作。我想通过一个快速简单的 JavaScript 文件来提供额外功能。文档说这是可能的,但没有示例。
我写这篇文章是为了帮助任何遇到此问题的人。特别是,如何
- 将参数传递给您的脚本;
- 在脚本中处理像文件系统对象这样的对象;
- 与用户交互。
执行您的脚本
第一步是让您的脚本执行。假设您已经创建了一个 Visual Studio 中的部署项目
- 将您的 JScript、VBScript 或 JavaScript 文件添加到项目中 - 使用文件系统编辑器视图(在解决方案资源管理器中右键单击项目,然后选择“视图”/“文件系统”)。这意味着您的脚本文件最终会出现在目标计算机上。
- 将脚本作为自定义操作运行 - 使用自定义操作编辑器将脚本文件添加到适当的操作文件夹下。例如,如果您希望脚本在安装后运行,请将其添加到“安装”文件夹。
现在,当您运行编译后的安装程序时,您的脚本应该会被调用。
向脚本传递信息
虽然执行脚本是一个不错的进展,但您可能希望在脚本执行时向其发送一些数据。如果您在自定义操作编辑器中突出显示脚本,属性窗口将有四个条目
- (
名称
) - 您的脚本的文件名; 条件
- 一个将要被测试以确定脚本是否应该执行的条件;CustomActionData
- 在脚本执行时传递给脚本的数据;SourcePath
- 脚本的源位置。
CustomActionData
可用于在脚本执行时将任何字符串信息传递给脚本。数据可以包含从用户那里读取的信息。例如,如果您在用户界面编辑器中包含了一个“文本框”对话框,每个文本框都可以被赋予一个属性名。文本框的内容可以通过将属性名放在 CustomActionData
中并用方括号括起来来传递给脚本。其他内置参数,如 TARGETDIR
,可以以相同的方式提供。
CustomActionData
的一个限制是它只允许您使用一个字符串。如果您想传递多个参数,那就得靠您自己了。我的解决方法是用“|”字符分隔我的参数。例如
[TARGETDIR]|[URL]|[SMTP_ADDRESS]
在脚本中,这可以被分割成单独的变量
var parameters = Session.Property("CustomActionData").split("|");
var targetDir = details[0];
var url = details[1];
var smtpAddress = details[2];
处理可脚本化的对象
如果您想处理像文件系统对象这样的可脚本化对象,您只需要像在独立脚本中一样正常创建它即可。下面的代码将创建一个文件系统对象,然后使用它来检查文件是否存在
var sharedFso = new ActiveXObject("Scripting.FileSystemObject");
if (sharedFso.FileExists("DeleteMe.txt"))
{
sharedFso.DeleteFile("DeleteMe.txt", true);
}
与用户交互
您的脚本可以通过调用安装程序会话来与用户交互。以下是一个显示是/否消息框的示例
var msiMessageTypeUser = 0x03000000;
var msiMessageTypeYesNo = 4;
var msiMessageTypeDefault1 = 0x000;
var options = msiMessageTypeUser
+ msiMessageTypeYesNo
+ msiMessageTypeDefault1;
var objRecord = Session.Installer.CreateRecord(1);
objRecord.StringData(0) = "[1]";
objRecord.StringData(1) = "Do you want to create the file?";
var response = Session.Message(options, objRecord);
结论
希望这篇简短的文章能为您使用 Visual Studio 部署项目创建的安装程序中的脚本提供一些有用的提示。部署项目提供的功能相当有限。但是,该工具是 Visual Studio 的免费附加组件,并且通过调用任意脚本的能力,它们可以非常强大。
下载包中包含一个演示所有上述功能的项目。下载