使用带有SQL Server代理的DLL的调用要求在调用计算机上安装DLL,而不是安装包的计算机

时间:2009-09-10 00:32:16

标签: sql-server ssis sql-server-agent

我们有一个安装在中央服务器上的SSIS 2005软件包,可以从多个位置调用。 这个包使用一个脚本任务来调用我在c#中编写的.NET DLL,并安装到中央服务器上的GAC中。 当我从安装了软件包的服务器调用SSIS软件包时,一切都很好。

当我使用SQL Server Agent从远程服务器调用程序包时,作业无法报告它无法找到DLL。

只是为了测试发生了什么我在远程服务器上安装了dll并且包成功了。所以看起来尽管软件包安装在一台机器上,但是当它使用SQL Server agend从另一台机器上调用时,它实际上是在调用机器上执行的,它是必须满足所有依赖项的调用机器。

这个软件包将从几十台服务器中调用,其中很多服务器都是我无法控制的。

我是否可以通过这种方式,安装,配置,编译,调用或以其他方式执行此程序包的构建或执行方式,以便在安装程序包的计算机上从GAC调用DLL ?

1 个答案:

答案 0 :(得分:1)

不幸的是,您需要更改您的设计,因为SSIS包存储只是存储。执行总是在调用包的机器上进行,并且所有引用都被视为相对于该机器。

一个选项是向SSIS包添加一个任务,该任务在调用机器的GAC中复制和注册DLL - 但如果您无法控制某些正在执行的计算机,则无法保证执行的SQL代理帐户将有足够的权限注册DLL。

另一种解决方案是将DLL代码转换为SSIS包内的脚本任务。这意味着将代码从C#转换为VB,并且可能非常简单,具体取决于代码的细节。

如果没有关于包的目的和DLL的功能的更多细节,则很难评估其他替代方案,但您可以考虑是否可以参数化包以使其始终从存储服务器运行。 / p>