我有一个大问题,我什至不知道要检查什么。我有一个大的 SSIS 包,它在开始时运行一个“执行脚本”任务(名为 ST_2275f0b3eced4c84bd35d4c826cab866.csproj),用 C# 编写,如下所示:
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using Microsoft.Win32;
namespace ST_2275f0b3eced4c84bd35d4c826cab866.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
public void Main()
{
Dts.Variables["user_uca"].Value = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\TDCredentials").GetValue("user_uca").ToString();
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
底线是它使用来自特定 Windows 注册表项的数据加载 SSIS 包变量。问题是当我从 Visual Studio 运行 SSIS 包时它可以工作。但是,当我运行为该 SSIS 包创建的 Sql 代理作业时,它给了我错误:System.Reflection.TargetInvocationException:调用目标已引发异常。---> System.NullReferenceException:对象引用未设置为对象的实例。在 ST_2275f0b3eced4c84bd35d4c826cab866.csproj.ScriptMain.Main() 此错误表示 Windows 注册表项不存在。因为如果我故意删除特定的 Windows 注册表项,然后从 Visual Studio 运行 SSIS 包,我会收到确切的错误消息。我已经检查了所有我能做的事情:具有这些 Windows 注册表项的 sql 服务器和主机 - 它们是相同的。我还为这些密钥授予了“所有人”的权限,我还把密钥放在了 HKLocalMachine 中,以确保它们对所有用户都存在,仍然是同样的错误。有什么提示吗?!在此先感谢,博格丹。