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

Executing a SSIS package that references mso.dll with DTEXEC

很抱歉,如果有人回答了这个问题,但我无法找到解决我的问题的答案。我有一个 SSIS 包,其中有一个脚本任务引用:

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

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

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

当使用命令执行包时:

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

失败并显示错误消息

Cannot Create ActiveX component

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

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

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

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

Cannot Create ActiveX component

我已经尝试更改执行 SQL 服务器的帐户,使用本地系统、本地服务、网络服务、我自己的帐户和服务帐户 - none 其中似乎有所作为。

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

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

谢谢,

伊恩

在其他人遇到此问题时为后代更新。

首先,我用存储过程
替换了xp_cmdshell - SSISDB.catalog.create_execution
- SSISDB.catalog.set_execution_parameter_value
- SSISDB.catalog.start_execution

然后我确保在 SQL 服务器上正确设置了代理帐户(凭证和对权限的对象引用),以便它可以 运行 一个 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

谢谢,

伊恩