none
如何在已打开的进程中操作该程序 RRS feed

  • 问题

  • 需求:客服聊天软件,在网页上单击客服,相应的客服会话要从已经打开EXE里弹出。

    问题:当已经运行EXE ,如何在进程中关联并操作该程序。

           Process process = Process.GetCurrentProcess();
                bool IsMain = false;
                //遍历WPF程序的同名进程组
                foreach (Process p in Process.GetProcessesByName(process.ProcessName))
                {
                    //不是同一进程并且本进程启动时间最晚,则关闭较早进程
                    if (p.Id != process.Id && (p.StartTime - process.StartTime).TotalMilliseconds <= 0)
                    {
                        ///用已经打开的进程p 进行相关操作
                    
                        App.Current.Shutdown();
                    }
                }
    2017年5月15日 6:42

答案

  • HI,

    >> 需求:客服聊天软件,在网页上单击客服,相应的客服会话要从已经打开EXE里弹出。

    你是想在网页中调用你的WPF客服聊天程序吗?

    >> 问题:当已经运行EXE ,如何在进程中关联并操作该程序。

    你是如何关联程序的?你想怎么操作该程序?从你的代码可以看出,你是不想你的程序运行多个实例吗?如果是这样的话,建议你使用Microsoft.VisualBasic创建你的单例程序,这样你的操作系统始终只会包含一个该程序的实例。下面的代码供你参考:

    // 单实例WPF程序
        //1.添加引用:Microsoft.VisualBasic
        //2.继承 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
       public class SingleInstanceApplicationWrapper : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
        {
            public SingleInstanceApplicationWrapper()
            {
                //3.设置IsSingleInstance
                this.IsSingleInstance = true;
            }
            private WpfPointsApp app;
            protected override bool OnStartup(StartupEventArgs eventArgs)
            {
                base.OnStartup(eventArgs);
                app = new WpfPointsApp();
                app.Run();
                return false;
            }
            protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
            {
                base.OnStartupNextInstance(eventArgs);
                app.showWindow();
            }
        }
    //custom application insteard of app.xmal
        public class WpfPointsApp : System.Windows.Application
        {
            protected override void OnStartup(StartupEventArgs e)
            {
                base.OnStartup(e);
                showWindow();
            }
            public void showWindow()
            {
                mainWindow win = new mainWindow ();
                win.Show();
            }
        }

    自定义应用程序启动类,并在项目属性页设置该类为应用程序的启动类。

     //set up class
       public class StartUp
        {
            [STAThread]
            public static void Main(string[] args)
            {
                SingleInstanceApplicationWrapper wrapper = new SingleInstanceApplicationWrapper();
                wrapper.Run(args);
            }
        }

    希望有帮助。

    如果我有任何误解,请你重新编辑你帖子,并准确显示和描述您的代码执行的相关操作。

    Best Regards,

    Bob


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.






    2017年5月16日 2:09
    版主