2

抱歉,如果这已得到解答,但我无法找到解决我问题的答案。我有一个 SSIS 包,它有一个脚本任务,它引用:

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

通过 SQL Server Data Tools 执行时,包按预期运行。

当部署到集成服务目录并手动执行时,包会按预期运行。然后启用 xp_cmdshell。

使用命令执行包时:

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

它失败并显示错误消息

无法创建 ActiveX 组件

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

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

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。

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

谢谢,

伊恩

4

1 回答 1

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

谢谢,

伊恩

于 2017-04-03T15:16:41.857 回答