1. 程式人生 > >瀏覽器連結開啟客戶端應用

瀏覽器連結開啟客戶端應用

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)