执行使用DTEXEC引用mso.dll的SSIS包

时间:2017-02-24 16:20:38

标签: sql-server ssis xp-cmdshell dtexec

道歉,如果这已经得到回答,但我找不到能够解决问题的答案。我有一个SSIS包,其脚本任务引用:

C:\ Program Files(x86)\ Common Files \ microsoft shared \ OFFICE16 \ MSO.DLL。

通过SQL Server数据工具执行时,程序包按预期运行。

当部署到Integration Services目录并手动执行时,程序包将按预期运行。然后启用了xp_cmdshell。

使用以下命令执行包时:

DECLARE @returncode INT;
EXEC @returncode = xp_cmdshell 'DTEXEC /ISSERVER "\SSISD
\test\test_DW_ETL\test_script_task.dtsx"'

失败并显示错误消息

  

无法创建ActiveX组件

当使用相同的DTEXEC命令执行另一个在脚本任务中没有Microsoft Objects引用的SSIS包时,它已成功运行。

使用以下命令执行脚本任务包时:

DECLARE @returncode INT; EXEC @returncode = xp_cmdshell '@"C:\Program 
Files\Microsoft SQL Server\120\DTS\Binn\DTExec.exe" /ISSERVER "\SSISDB
\test\test_DW_ETL\test_script_task.dtsx"'

使用32位DTEXEC,程序包也会失败并显示错误消息

  

无法创建ActiveX组件

我尝试使用本地系统,本地服务,网络服务,我自己的帐户和服务帐户更改SQL Server执行的帐户 - 这些似乎没有任何区别。

我怀疑DTEXEC无法访问mso.dll。

这一定是一种非常常见的方法,所以我认为我必须错过一个相当明显的步骤。任何人都可以提供任何帮助吗?

谢谢,

伊恩

1 个答案:

答案 0 :(得分:1)

如果其他人遇到此问题,则为后代更新。

在第一个例子中,我参考了存储过程
来替换了xp_cmdshell - SSISDB.catalog.create_execution
- SSISDB.catalog.set_execution_parameter_value
- SSISDB.catalog.start_execution

然后我确保在SQL Server上正确设置了代理帐户(凭据和对象对权限的引用),以便它可以运行SSIS包。

SSIS包引用了Excel对象,因此我更新了Microsoft Excel的DCOM(MMC comexp.msc)设置,以确保代理帐户引用的帐户具有启动和激活权限以及访问权限。除此之外,还将身份设置为以交互式用户身份运行。

在开发环境中,我们安装了Visual Studio,SSDT和SSMS。测试环境只有SSMS。结果,丢失了许多组件,因此我们安装了SSDT和Windows SDK 8.1。我们还必须确保存在以下目录:
- C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop
- C:\ Windows \ System32 \ config \ systemprofile \ Desktop

谢谢,

伊恩