C# 试图控制打开的应用程序,而不是打开新的应用程序

C# 试图控制打开的应用程序,而不是打开新的应用程序,c#,process,saleslogix,C#,Process,Saleslogix,很难写出一个有意义的标题 因此,我正在与SalesLogix CRM合作,并尝试导航到所述CRM中的联系人。Saleslogix允许您使用类似于slx的url:CONTACT//C6UJ9A006S96 该行将CRM指向具有该ID的联系人 我的问题是,当我尝试导航到该url时,我打开了一个新的SalesLogix实例,而不是使用当前实例 Saleslogix是一款基于桌面的软件,仅供参考 对我来说,奇怪的是,如果我从“开始”菜单使用Windows“运行…”并将其放入slx:CONTACT//C6

很难写出一个有意义的标题

因此,我正在与SalesLogix CRM合作,并尝试导航到所述CRM中的联系人。Saleslogix允许您使用类似于slx的url:CONTACT//C6UJ9A006S96

该行将CRM指向具有该ID的联系人

我的问题是,当我尝试导航到该url时,我打开了一个新的SalesLogix实例,而不是使用当前实例

Saleslogix是一款基于桌面的软件,仅供参考

对我来说,奇怪的是,如果我从“开始”菜单使用Windows“运行…”并将其放入slx:CONTACT//C6UJ9A006S96,那么它将使用已经打开的应用程序,与普通命令提示符相同,但是如果我使用管理命令提示符,它将打开SalesLogix的新实例。我检查了任务管理器,不管我是用管理员命令提示符还是桌面窗口打开它,它都会说它是在我的当前用户下运行的,而不是系统或任何奇怪的东西,所以用户似乎不是问题所在

我的代码是:

Process[] processes = Process.GetProcesses();
        foreach (Process p in processes)
        {
            if (p.ProcessName == "SalesLogix")
            {
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.UseShellExecute = false;

                p.StartInfo.FileName = @"C:\Program Files (x86)\SalesLogix\SalesLogix.exe";
                p.StartInfo.Arguments = "slx:CONTACT//C6UJ9A006S96";
                p.Start();
            }
        }

任何帮助都将不胜感激,如果我没有足够清楚地解释我的问题,我将很乐意澄清任何困惑。

我认为您在这里所做的是接受已经运行的流程,重写其参数并重新启动它。您是否尝试使用这些参数调用新进程,以查看它是否会附加到现有系统进程?

尝试直接运行URL。与中一样,不要执行SalesLogix exe,只需将URI作为文件名传递给Windows协议处理程序即可。

您是否尝试过使用shell execute直接运行URL?与中一样,不要执行SalesLogix exe,只让Windows协议处理程序处理它。至于你关于用户的问题,事实上它确实起了作用。我不确定这是否是正确的术语,但“以管理员身份运行”会在不同的上下文下运行一个进程,即使它看起来是以同一个用户的身份运行。如果这样做有效,您可能不需要所有的代码循环和设置值。只需尝试:Process.Startslx:CONTACT/C6UJ9A006S96@我就是这么想的did@pcdev设置p.StartInfo.UseShellExecute=true;p.StartInfo.FileName=slx:CONTACT/C6UJ9A006S96;结果真的成功了!如果你把你的评论作为回答,我会接受的。对不起,我对你说的有点困惑。我没有通过现有的运行流程。从您所说的来看,您尝试运行的应用程序似乎有一种方法可以在同一运行实例中处理新的应用程序调用。简而言之:流程p=新流程;p、 StartInfo.RedirectStandardOutput=true;p、 StartInfo.UseShellExecute=false;p、 StartInfo.FileName=@C:\ProgramFilesx86\SalesLogix\SalesLogix.exe;p、 Arguments=slx:CONTACT//C6UJ9A006S96;p、 开始;这样,它将有希望连接到正在运行的进程本身,而不是重写现有进程并启动新的应用程序