创建预处理或后处理脚本
您可以在布署应用程序时创建脚本来执行操作,然后定义在部署过程中何时运行该脚本。 同一脚本中可以同时包含安装和清理代码,之间用环境变量分隔。 也可以向脚本中传递命令行参数。
注意
您始终应以无提示模式编写用于生产系统的脚本。 这是因为等待用户输入的脚本会导致 BizTalk 数据库锁定和无法访问,直到收到输入时为止。
指定脚本在部署期间何时运行
通过将脚本作为 System.BizTalk:PreProcessingScript(预处理脚本)或 System.BizTalk:PostProcessingScript(后处理脚本)添加到应用程序,可以指定何时运行该脚本。
预处理脚本和后处理脚本以如下方式运行:
预处理脚本在导入或安装过程开始时运行。
后处理脚本在导入或安装过程结束时运行。
在卸载过程中,所有脚本的运行顺序与安装过程中的运行顺序相反。 因此,后处理脚本在卸载开始时运行,预处理脚本在卸载结束时运行。
如果安装失败,则会使用相应的回滚操作以相反顺序调用脚本。
调用前或后处理脚本后,通过检查环境变量BTAD_ChangeRequestAction、BTAD_InstallMode和BTAD_HostClass,确定 (安装、导入、删除、卸载、导入回滚或安装回滚) 部署状态,如 环境变量如何指示部署状态中所述。 有关变量的参考信息,请参阅 预处理和后处理脚本环境变量。
有关将脚本添加到应用程序的说明,请参阅 如何将预处理或后处理脚本添加到应用程序。
注意
如果要在脚本中包含命令行参数(如本主题稍后部分讨论),则必须使用 AddResource 命令来添加脚本。
支持的脚本文件扩展名
支持以下脚本文件扩展名:.com、.exe、.bat、.cmd、.vbs、.vbe、.js、.jse、.wsf 和 .wsh。 PATHEXT 环境变量中定义了此扩展名集合。
记录错误
作为一种最佳实践,应该将每个脚本都配置为向文件中记录错误。 这是因为 Windows Installer 不会记录脚本中生成的错误。 如果脚本运行后出现需要解决的任何错误,则应该检查这些日志。
为了帮助确定错误发生的时间,可以在日志文件中包含日期和时间。
使用以下代码可以指定一个日志文件,然后向其中记录一条错误。
Set LogFile=<full path of log file>
…
echo %DATE% %TIME% <text> >> %LogFile%
在以下示例中,如果未定义公钥标记,则会在指定的日志文件中记录一个条目。 在日志文件中,日期和时间与文本“Public key should be set in script”写在同一行中。
set LogFile=C:\ScriptLog.txt
set PublicKeyToken=e5fd0ea4ecd37420
if not defined PublicKeyToken (
echo %DATE% %TIME% Public key should be set in script >> %LogFile%
还可以将 行 exit /b 1
添加到脚本中,为 Windows Installer 生成错误代码,这将导致它回滚。
在以下示例中,如果未定义公钥标记,脚本会向 Windows Installer 返回一条错误,安装程序将会回滚。
set LogFile=C:\ScriptLog.txt
set PublicKeyToken=e5fd0ea4ecd37420
if not defined PublicKeyToken (
echo %DATE% %TIME% Public key should be set in script >> %LogFile%
exit /b 1
在同一脚本中包含安装代码和清理代码
由于在安装和卸载过程中脚本的运行顺序相反,因此可以在同一脚本的条件语句中包含安装代码和清理代码。 例如,可以将安装代码放在检查安装模式的条件语句中,如下所示:
%BTAD_ChangeRequestAction%=Update AND %BTAD_InstallMode%=Install
可以将清理代码限定在检查安装模式的条件语句中,如下所示:
%BTAD_ChangeRequestAction%=Delete AND %BTAD_InstallMode%=Uninstall
传入命令行参数
在使用 BTSTask AddResource 命令将脚本添加到应用程序时,可以通过指定以下参数将命令行参数传递到脚本中。 执行此操作时,参数会在调用脚本时传递到脚本中。
/Property:Args=“argument list”
注意
如果应用程序中有多个预处理脚本或后处理脚本,它们不会按特定的顺序运行。
重要
不要在脚本中使用 BTSTask 命令,特别是那些在导入过程中运行的命令,因为脚本与导入未登记在同一个事务中。
有关使用 AddResource 命令将脚本添加到应用程序的说明,请参阅 AddResource 命令:预处理脚本。 另请参阅 AddResource 命令:后处理脚本