浏览器链接打开客户端应用

1.背景

  给甲方爸爸做的项目,入口需要集成至oa系统上去。即浏览器端打开本地cs应用,传输登录信息。

2.方案

  最简单的,可直接通过注册表协议的方式。直接bs打开cs。(以下程序涵盖此种)

  可是,boss要求我方系统不直接与oa系统进行“接触”,需要做一个中间件。即:bs调用中间程序,中间程序解析后给至客户端。

3.程序

(1)加密解密程序不再赘述。(对称加密,非对称加密)

(2)程序写入打开cs的注册表(可手动加入)

        public void WriteToRegedit(string exePath)
        {
            //注册的协议头,即在地址栏中的路径 如QQ的:tencent://path/**.exe 在浏览器地址栏中输入:tencent:// 就能打开本程序
            var surekamKey = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("BISTurboInterface");

            //以下这些参数都是固定的,不需要更改
            var shellKey = surekamKey.CreateSubKey("shell");
            var openKey = shellKey.CreateSubKey("open");
            var commandKey = openKey.CreateSubKey("command");
            surekamKey.SetValue("URL Protocol", "");

            //exePath  cs程序的路径信息
            commandKey.SetValue("", "\"" + exePath + "\"" + " \"%1\"");
        }

(3)查看是否已经有cs程序在运行。若有,kill进程,再重新打开该程序

                Process[] processes = Process.GetProcessesByName("AppName");
                if (processes.Count() > 0)
                {
                    foreach (var item in processes)
                    {
                        item.Kill();
                    }
                }
                Process pr = new Process();//声明一个进程类对象
                pr.StartInfo.FileName = path;
                pr.Start();
                

(4)带参数的解析以及打开

                    //input参数为该中间件exe程序入口传入的string[]类型参数                    
                    string canshu = DESEncrypt.Decrypt(input[0].Split('/')[2]);
                    string username = canshu.Split('&')[0];
                    //调用程序
                    Process pr = new Process();//声明一个进程类对象
                    pr.StartInfo.FileName = path;
                    //pr.StartInfo.FileName = @"F:\WorkSpaces\TestCode\test\test\bin\Release\test.exe";
                    //该出为自定义的规则,可删掉“++”
                    pr.StartInfo.Arguments = "++"+username;
                    pr.Start();

这样就完成了整个过程。bs传输协议头以及加密字符串至中间件exe,程序解析参数后,根据一定规则判断做出动作(若无注册就注册,若已经注册并且程序运行就kill进程重开,若注册并无程序运行就打开协议对应的地址启动cs)

猜你喜欢

转载自blog.csdn.net/miluli1/article/details/85599951