PCB CS架构(工程系统)实现单点登入方法
社会的不断进步发展,分工也越来越细了.而我们工作接触的范围也越来越狭小了,但这不是倒退了,而是分工之细让人们在各个方面深耕细作。PCB企业软件系统发展路线同样也如此,随着我们PCB企业发展不断壮大,软件系统也在不断细分。目的只有一个,让专业的事情交给专业的系统去做。回想当初起公司用必有德ERP,一个ERP能搞定PCB所有业务,从前端销售管理(销售订单,合同评审,客户资料管理),再到制前工程(MI资料,ECN,开料,钻孔,排版) ,接着到生产管理(lot卡,投料,过数,MRB报废),再到品质管理(来料检查,入库检查,出库检查,提共大量统计报表,不良原因分析,IQC报表)等等。在当时确实是牛X的,但公司是向前不断发展, 业务也变得越来越复杂多变,必有德ERP无法支撑企业发展步伐啊,最终选择放弃了。必有德ERP的原功能模块被分解到各个新系统中去了。目前PCB企业管理系统被细分为9个系统:
OMS订单管理系统
EDS工程数据管理系统
APS高级计划排程系统
MES制造执行系统
文件网 标签打印系统
WMS仓储管理系统
TMS物流运输管理系统
ERP 企业资源管理系统
HCM人力资源管理系统
有这么多系统 ,每套系统都有自己独立的用户与权限管理,那问题就来了。假如:一个人如果拥有4个系统用户权限帐号,那么这个用户需要来来回回在4个系统都输入一次帐号密码。这样用户体验肯定是差的。 为了得到改善,OA系统发起单点登入项目,OA作为统一用户数据源,用户经过OA统一验证 ,达到登入OA系统后,通过OA系统能直接启动并进入其它系统主界面的目的。这里介绍CS架构(工程系统)实现单点登入方法,即用网页启对本地exe的方法。
一.在本机注册URLProtocol协议
1.手动注册表增加URLProtocol协议
可以运行regedit, 在HKEY_CLASSES_ROOT节点按下图操作:(EDS名称可以自己定)
1.增加协放名:EDS
2.默认值改为:URL: EDS Protocol Handler
3.增加名称:URL Protocol 数据值为:启动的exe路径

4.在command节点,默认数据改为:“启动的exe路径” + “%1”

2.代码方式增加URLProtocol协议
/// <summary>
/// 注册协议
/// </summary>
/// <param name="Root_Key">根节点</param>
/// <param name="file_application_path">应用程序路径</param>
/// <param name="file_application_ico">应用程序打开图标,可选值</param>
/// <returns></returns>
public bool RegeditAdd(string Root_Key, string file_application_path, string file_application_ico)
{
RegistryKey reg_CurrentUser = Registry.CurrentUser;
try
{
//获取注册表CurrentUser/SOFTWARE/Classes项
RegistryKey reg_Classes = reg_CurrentUser.OpenSubKey("SOFTWARE", true).OpenSubKey("Classes", true);
RegistryKey reg_key = reg_Classes.OpenSubKey(Root_Key, true);
if (reg_key == null)
{
RegistryKey reg_sjbs = reg_Classes.CreateSubKey(Root_Key);
//添加默认项
reg_sjbs.SetValue("", "URL: " + Root_Key + " Protocol Handler");
//协议别名
reg_sjbs.SetValue("URL Protocol", file_application_path);
RegistryKey reg_DefaultIcon = reg_sjbs.CreateSubKey("DefaultIcon");
if (!String.IsNullOrEmpty(file_application_ico) || file_application_ico == "")
{
//设置自定义图标
reg_DefaultIcon.SetValue("", file_application_ico);
}
else
{
//设置系统定义图标
reg_DefaultIcon.SetValue("", file_application_path + ",1");
}
//呼出处理程序
RegistryKey reg_command = reg_sjbs.CreateSubKey("shell").CreateSubKey("open").CreateSubKey("command");
//%1 表示传递的参数,再次%1表示调用处显示链接文本
reg_command.SetValue("", "\"" + file_application_path + "\" \"%1\"");
}
return true;
}
catch { return false; }
finally { reg_CurrentUser.Close(); }
}
界面:

二.exe客户端代码修改
1.将Main入口args参数(帐号密码)传给login登入窗口,用于接受浏览器传入工厂,帐号,密码等参数
2.更改环境变量的当前目录按如下更改,
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
static void Main(string[] args)
{
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;//通过反射打开form窗体,用浏览器打开,一定要加上此句(启动程序路径与本身程序路径不同,需改为相同)
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Assembly assembly = Assembly.LoadFrom(ConfigurationManager.AppSettings["StartUpFormDll"]);
Form frm = assembly.CreateInstance(ConfigurationManager.AppSettings["StartUpForm"]) as Form;
Logger.Instance().Register();
if (args.Length > )
frm.Tag = args[];//将参数传给login窗口, 再到login窗口再将帐号密码解密后再登入验证
Application.Run(frm);
}
三.浏览器网页打开
本机网页测试:参数改为登入系统的帐号密码,即可点击标签地址实现启动本机exe并登入主界面.
在OA系统端使用:用户登入到OA系统,可通过OA系统的用户名与密码,并加密后放在href地址中;用户点击标签地址即可打开本地exe
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="name">
<title>启动EDS</title>
<style> </style>
</head>
<body>
<a href="eds://###Factory###Username###password###">启动EDS</a>
<script></script>
</body>
</html>
四.在本机删除URLProtocol协议
1.注册表方式删除URLProtocol协议
运行regedit,如下HKEY_CLASSES_ROOT节点下,找到需要删除协义名
2.代码方式删除URLProtocol协议
/// <summary>
/// 删除协议
/// </summary>
/// <param name="Root_Key">根节点</param>
/// <returns></returns>
public bool RegeditDelete(string Root_Key)
{
RegistryKey reg_CurrentUser = Registry.CurrentUser;
try
{
//获取注册表CurrentUser/SOFTWARE/Classes项
RegistryKey reg_Classes = reg_CurrentUser.OpenSubKey("SOFTWARE", true).OpenSubKey("Classes", true);
RegistryKey reg_sjbs = reg_Classes.OpenSubKey(Root_Key, true);
if (reg_sjbs != null)
{
reg_Classes.DeleteSubKeyTree(Root_Key);
return true;
}
return false;
}
catch { return false; }
finally { reg_CurrentUser.Close(); }
}
界面:

PCB CS架构(工程系统)实现单点登入方法的更多相关文章
- CAS实现单点登入(sso)经典教程
本教程我已按照步骤实现,不过要深入了解单点登入还需要进一步的学习,掌握其中的精髓. 一.简介 1.cas是有耶鲁大学研发的单点登录服务器 2.本教材所用环境 Tomcat7.2 JDK6 CAS Se ...
- springmvc shiro整合cas单点登入
shiro cas分为登入跟登出 maven依赖: <dependency> <groupId>org.apache.shiro</groupId> <art ...
- Spring Boot SSO单点登入
https://github.com/ITDragonBlog/daydayup/tree/master/SpringBoot-SSO 流程图: 1: Redis 保存用户信息 到Redis(KEY- ...
- jwt单点登入
主要有以下三步: 项目一开始我先封装了一个JWTHelper工具包(GitHub下载),主要提供了生成JWT.解析JWT以及校验JWT的方法,其他还有一些加密相关操作.工具包写好后我将打包上传到私 ...
- 源代码解读Cas实现单点登出(single sign out)功能实现原理
关于Cas实现单点登入(single sing on)功能的文章在网上介绍的比较多,想必大家多多少少都已经有所了解,在此就不再做具体介绍.如果不清楚的,那只能等我把single sign on这块整理 ...
- 源代码解读Cas实现单点登出(single sign out)功能实现原理--转
关于Cas实现单点登入(single sing on)功能的文章在网上介绍的比较多,想必大家多多少少都已经有所了解,在此就不再做具体介绍.如果不清楚的,那只能等我把single sign on这块整理 ...
- python编辑用户登入界面
1.需求分析 登入界面需要达到以下要求: 系统要有登入和注册两个选项可供选择 系统要能够实现登入出错提示,比如账户密码错误等,用户信息保存在user_info.txt文件夹中 系统要能够进行登入错误次 ...
- Oracle+struts2实现用户登入并显示访问次数
实体类: package entity; public class userfo { private int id;//id private String name;//用户名 private Str ...
- PCB 工程系统 模拟windows域帐号登入
一.需求描述: 对于PCB制造企业来说,基本都采用建立共享目享+域名管控权限,好像别的大多数行业都是这样的吧.呵呵 在实际应用中,经常会有这样的问题,自己登入的帐号没有共享目录的权限,但又想通过程序实 ...
随机推荐
- WIndows 系统下的常用命令 和 检测方法
### 一.检测硬盘速度(Windows 自带工具) #### 使用windows 系统自带的工具测试硬盘读写速度 > 在使用下面命令前,需要获得管理员权限,才会在Dos窗口上显示(否则,一闪而 ...
- 搭建私有docker仓库
安装docker yum install docker 启动docker systemctl start docker 拉取registry镜像 docker pull registry 创建仓库配置 ...
- Oracle 回滚(ROLLBACK)和撤销(UNDO)
一.回滚(ROLLBACK)和撤销(UNDO) 回滚和前滚是保证Oracle数据库中的数据处于一致性状态的重要手段. 在9i版本以前 Oracle使用数据库中的回滚段来实现未提交数据或因系统故障导致实 ...
- 51NOD 1183编辑距离(动态规划)
>>点击进入原题测试<< 思路:这个题放在基础题,分值还是零分,好歹也给人家动态规划一点面子啊!刚开始写的想法是找到其最大公共字串,然后用两个字符串中最长字符串的长度减掉最大公 ...
- Uva 10730 Antiarithmetic?
uva 10730 题意:给出一列数字,如果其中存在长度大于等于3的等差数列,输出no,不存在就输出yes 这道题标定了数列长度n,而且这n个数数据范围是从0到n-1,没有相同的数,这就给我们枚举提供 ...
- jQuery下拉列表操作(转)
转地址:http://www.cnblogs.com/yaoshiyou/archive/2010/08/24/1806939.html jQuery获取Select选择的Text和Value:语法解 ...
- codevs2370 小机房的树
题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子, ...
- spark之scala快速入门
scala和java都是在jvm之上的语言,相对来讲,scala热度比较低,其实并不是一个特别好的语言选择. 原因倒不是因为scala本身的缺点,而是使用人群不够多,论坛和社区不够活跃.这就跟社交软件 ...
- [bzoj1293][SCOI2009]生日礼物(单调队列)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1293 分析: 问题的关键就是选择每种颜色的哪一个好.可以先把每种颜色的第一个一起,更新 ...
- [bzoj 2705][SDOI2012]Longge的问题(数学)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2705 分析: 设k为n的因数 设f[k]为gcd(x,n)==k的x的个数,容易知道a ...