让应用与另一个正在运行的应用程序交互的最佳方式

时间:2011-08-03 22:23:49

标签: vb.net

我是vb.net编程的新手,所以请耐心等待。我试图在终端服务器环境中执行以下操作...

在用户登录时,启动我创建的应用。此应用程序在Web浏览器控件中打开一个Web站点,将用户登录到Web站点,并从生成的Web页面解析链接。这些链接是在另一个服务器场上启动Citrix会话的链接。

创建另一个应用程序,该应用程序出现在登录用户的开始菜单上。用户点击此应用程序,它与启动应用程序通信,基本上单击与webbrowser控件中的citrix应用程序关联的href。然后这个应用程序将消失......

我已经编写了第一个应用程序,并想出了如何在webbrowser控件中单击链接。我无法弄清楚的是如何实现第二个应用程序,它作为一个单独的应用程序运行,但与第一个应用程序进行通信以开展业务。我看到了很多选项,如MFC,AppDomains,RPC等。我的问题是让一个应用程序与另一个应用程序交互并让另一个应用程序根据该交互进行操作的最佳做​​法是什么?我更喜欢完全坚持使用vb.net。

我希望如何工作的一个很好的例子 - 桌面上打开了一个Web浏览器(IE,FF,等等),用户点击电子邮件中的链接,在运行的浏览器中打开链接。邮件客户端中的操作会导致浏览器中的操作。

5 个答案:

答案 0 :(得分:1)

就我而言,我发现使用My.Application.StartupNextInstance事件可以完美地满足我的需求。每次运行重复实例时,它不会使用多个应用程序使用相同的应用程序,而是将命令行参数传递给第一个实例。

但是对于给出上述答案的每个人都非常公平,我相信StartupNextInstance事件正在使用WCF进行传递。通过框架使用单个实例应用程序,我不必手动编写来回传递的所有内容......

答案 1 :(得分:0)

WCF管道非常适合进程间通信。 请检查以下示例: http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

它在C#中,但您可以轻松地将其转换为VB.NET。

答案 2 :(得分:0)

为了让两个应用程序进行通信,您需要某种形式的跨进程通信机制,以允许服务(提供可以调用的操作的应用程序)监听传入请求以及客户端调用那些暴露的行动。

您最好的选择是使用Windows Communication Foundation(WCF)来展示您的第二个应用可以调用的第一个应用中的服务。

我建议您在Codeplex查看我的Magic8BallService sample app。它是用C#编写的,但它非常简单,应该为您提供所需的大部分理解,以便创建您正在寻找的内容。

HTH。

答案 3 :(得分:0)

答案 4 :(得分:0)

我更喜欢使用互斥锁来实现此功能
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

/**
* The idea here : we will using mutex to prevent run more than one instance from our application
*/
namespace ParallelDotNet.TaskProgramming
{
    class MutexAcrossApplications
    {
        public static void Run()
        {
            const string appName = "ThisIsOurUniquApplicationName965584";
            Mutex mutex;
            try
            {
                mutex=Mutex.OpenExisting(appName);
                Console.WriteLine($"Sorry You Cant Run Multible instance of this program : This is alredy Run");
            }
            catch (WaitHandleCannotBeOpenedException e)
            {
                Console.Write($"Welecom This is the first instance of this program");
                mutex=new Mutex(false,appName);
            }

            Console.ReadKey();
            mutex.ReleaseMutex();

        }
    }
}