使用 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
谢谢,
伊恩
很抱歉,如果有人回答了这个问题,但我无法找到解决我的问题的答案。我有一个 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
谢谢,
伊恩