瀏覽器連結開啟客戶端應用
阿新 • • 發佈:2019-01-07
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)