admin 管理员组文章数量: 887021
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)
版权声明:本文标题:浏览器链接打开客户端应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726854210h1040028.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论