C# 使用MS Project对象模型连接到特定的Project Server站点和项目

C# 使用MS Project对象模型连接到特定的Project Server站点和项目,c#,ms-project,C#,Ms Project,注意:我已经解决了winproj.exe打开抛出错误的错误问题。这个问题不再是我的问题 我在Visual Studio中将Microsoft.Office.Interop.MSProject中的属性EmbeddedIntroOpTypes更新为false,基本上解决了这个问题,这使我能够使用插入新代码的ApplicationClass过程 我现在唯一的问题是打开winproj.exe: var objProcess = Process.Start(@"winproj.exe"

注意:我已经解决了
winproj.exe
打开抛出错误的错误问题。这个问题不再是我的问题

我在Visual Studio中将
Microsoft.Office.Interop.MSProject
中的属性Embedded
IntroOp
Types更新为false,基本上解决了这个问题,这使我能够使用插入新代码的
ApplicationClass
过程

我现在唯一的问题是打开
winproj.exe

var objProcess = Process.Start(@"winproj.exe", " / s " + OnlinePWA
它抛出一个文件未找到的错误,该错误会停止进程,直到我取消这些错误,然后打开项目。如果有人对打开winproj.exe和抑制错误有任何意见,请告诉我

谢谢

公共静态列表GetProjectTaskLinks(字符串OnlinePWA,
字符串用户名、字符串密码、列表项目、字符串OnPrem)
{
字符串PWAInstance=OnlinePWA.Replace(“https://”和“”);
字符串[]PWAInstance2=PWAInstance.Split('/');
int i=PWAInstance2.Count()-1;
字符串PWAInstance3=PWAInstance2[i];
setDefaultpMainstance.SetInstanceToYes(pMainstance3);
var objProcess=Process.Start(@“winproj.exe”、“/s”+OnlinePWA);
任务链接客户端列表=
新列表();
foreach(项目中的var项目)
{
ApplicationClass objProject=新的ApplicationClass();
objProject.Visible=false;
对象omising=System.Reflection.Missing.Value;
文件对象=@“\”+inproject.ToString();
object oReadOnly=true;
objectoformat=“MSProject.mpp”;
对象USERID=UserName.ToString();
对象oDatabasePassword=Password.ToString();
objProject.DisplayAlerts=false;
objProject.FileOpen(oFile,oReadOnly,PjMergeType.pjDoNotMerge,
删除,删除,删除,删除,删除,oUserID,oDatabasePassword,
oFormat,omising,PjPoolOpen.pjPoolReadOnly,omising,omising,
省略,省略);
Microsoft.Office.Interop.MSProject.Project项目=
objProject.ActiveProject;
foreach(project.Tasks中的Microsoft.Office.Interop.MSProject.Task任务)
{
if(task.preforcess.Contains(“+”)||
task.preferences.Contains(“-”)
{
FromTaskLinks客户端fromTaskClientLinks=
新建FromTaskLinksClient();
字符串名称=task.Name;
fromTaskClientLinks.ProjectName=inproject.ToString();
fromTaskClientLinks.TaskPredValue=task.Predients;
fromTaskClientLinks.TaskPred_Id=Guid.Parse(task.Guid);
fromTaskClientLinks.TaskPred_Name=task.Name;
fromTaskClientLinks.TaskPred_OutLineLevel=task.OutLineLevel;
fromTaskClientLinks.TaskPred_OutLineNumber=task.OutLineNumber;
fromTaskClientLinks.ProjectId=Guid.Empty;
fromTaskLinksClients.Add(fromTaskClientLinks);
}
}
objProject.Quit(PjSaveType.pjDoNotSave);
}
setDefaultpMainstance.SetInstanceToNo(pMainstance3);
从TaskLinks客户端返回;
}

我希望能够访问项目和任务数据以对其进行更新。同样,CSOM不允许使用fs+x天更新前辈。我将不得不使用MS Project对象模型。

可能重复使用此模型。你有没有一个c#选项。VBA选项对我不起作用。我看到的是我的objproject打开了默认的pwasales实例,我希望它打开我的pwa实例。在使用interop.msproject应用程序对象打开之前,我看到了您对更改注册表值的引用,但我希望可以通过编程方式设置配置文件默认值。仅供参考,我已在链接中向您发送了一个连接来讨论此问题。我已通过以下操作解决了大部分问题:首先,您必须进入Microsoft.Office.Interop.MSProject的属性,并将嵌入的互操作类型更改为false。我已经发布了上面的新代码,但当winproj.exe启动时仍然存在问题。它抛出错误消息说“Project无法打开此文件”,因为我在代码后面才指定文件。我现在只需要抑制winproj.exe打开错误。任何思想在命令行开关的中间不应该有一个空间:它应该读<代码>“/s”+ OnLeNEWAW/COD>,而且我不确定Win Prime.EXTERT >代码> @“WiNPROP.EXE/S”+ ONLIPEPWA/COD>之后有逗号。谢谢瑞秋,我发现了这一点并实现了那个修复。我现在遇到的唯一问题是,我发布了我的web应用程序,它托管在我的azure租户上,当我实时运行它时,它不会打开桌面project professional应用程序。我想我必须弄清楚如何允许运行在云服务器上的web应用程序访问我的桌面project professional应用程序,以打开并处理项目的更新。从外部web应用程序打开office应用程序的任何人的任何建议都会很有帮助