我已经使用C#创建了一个可执行文件,该文件连接到VSO,获取工作项并对其进行更新。
以下是用于连接到VSO并获取项目的代码:
TfsTeamProjectCollection tfsTeamProjectCollection = null;
NetworkCredential networkCredential = new NetworkCredential(userName, password);
ICredentials credential = (ICredentials)networkCredential;
Uri tfsUri = new Uri(tfsUrl);
TfsConfigurationServer tfai = new TfsConfigurationServer(tfsUri, (ICredentials)credential);
try
{
tfai.EnsureAuthenticated();
}
catch (Exception ex)
{
throw new Exception(string.Format("Auth fail.({0})", ex.Message));
}
Microsoft.TeamFoundation.Framework.Client.ITeamProjectCollectionService tpcService = tfai.GetService<Microsoft.TeamFoundation.Framework.Client.ITeamProjectCollectionService>();
Microsoft.TeamFoundation.Framework.Client.CatalogNode configurationServerNode = tfai.CatalogNode;
System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.TeamFoundation.Framework.Client.CatalogNode> tpcNodes = configurationServerNode.QueryChildren(new Guid[] { Microsoft.TeamFoundation.Framework.Common.CatalogResourceTypes.ProjectCollection }, false, Microsoft.TeamFoundation.Framework.Common.CatalogQueryOptions.None);
foreach (Microsoft.TeamFoundation.Framework.Client.CatalogNode tpcNode in tpcNodes)
{
if (tpcNode.Resource.DisplayName.ToUpper() == "PROJECTNAME")
{
tfsTeamProjectCollection = tfai.GetTeamProjectCollection(new Guid(tpcNode.Resource.Properties["InstanceID"]));
foundProject = true;
break;
}
}
if(foundProject)
{
WorkItemStore workItemStore = (WorkItemStore)tfsTeamProjectCollection.GetService(typeof(WorkItemStore));
}
代码工作正常。 手动运行时,即使是相同代码的exe也可以正常工作。
我已经创建了一个SSIS包,执行过程任务在手动运行时可以很好地运行该exe。
但是当我部署程序包并通过SQL Agent作业运行它时,它失败并显示错误:
错误:在“”处执行“ name.exe”“”。进程退出代码为 “ -532462766”,而预期值为“ 0”。
我尝试在32位和64位环境中运行该程序包。每次失败均出现相同错误。
所有用户(SQLSERVERINSTANCE,SQLSERVERAGENT,SERVICEACCOUNT)都有权访问可执行文件。
我错过了什么吗?还是我必须在服务器端进行一些更改才能使SQL Agent能够连接到VSO?
P.S .:我正在使用SQL SERVER 2016。
答案 0 :(得分:0)
“所有用户(SQLSERVERINSTANCE,SQLSERVERAGENT,SERVICEACCOUNT)都可以访问可执行文件。”并不意味着这些帐户可以访问该资源,例如引用,在可执行文件中使用。
您需要创建一个具有足够权限的代理帐户,然后使用它来运行作业步骤。