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制造企业来说,基本都采用建立共享目享+域名管控权限,好像别的大多数行业都是这样的吧.呵呵 在实际应用中,经常会有这样的问题,自己登入的帐号没有共享目录的权限,但又想通过程序实 ...
随机推荐
- MYEclipse Available Memory is low 警告 解决方法
1, 设置Eclipse内存使用情况 修改eclipse根目录下的eclipse.ini文件 -vmargs //虚拟机设置 -Xms40m -Xmx256m -XX:PermSize=128M ...
- php第二十二节课
AJAX <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- (C/C++学习)14.C语言字符串处理函数(二)
说明:上节着重解释了字符串处理的库函数处理,这节将针对一些常用的需求,进行非库函数的处理. 一.去除某一个字符串中的某个字符 1.去除字符串右边的空格 void trimStrRightSpace(c ...
- Linux 安装 JDK 详解
安装 JDK 说明:Linux 系统中安装软件需在 root 用户下进行. (1) 首先下载 jdk-8u131-linux-x64.rpm (2)将用户切换至 root,在 opt 文件夹下新建 s ...
- Oracle 数据库启动与关闭 各种方式详解整理
概述 只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库. 在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库. 虽然数据库正常运行,但如果 ...
- Spring Security核心类关系图
以有限的脑力记忆无限的Knowledge,多画图,多画图,多画图. 核心类Authentication 和 GrantedAuthority AbstractAuthenticationToken 由 ...
- 【Codeforces 476C】Dreamoon and Sums
[链接] 我是链接,点我呀:) [题意] 让你求出所有x的和 其中 (x div b)是(x mod b)的倍数 且x mod b不等于0 且(x div b)除(x mod b)的值(假设为k),k ...
- Windows学习总结(8)——DOS窗口查看历史执行过的命令的三种方式
在DOS窗口执行了一些列命令完成某项工作后,如果要查看都执行了那些命令,该如何办呢?(前提:DOS窗口未关闭的情况下) 一.方法一: 使用↑↓箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况. ...
- HDU 1042 大数计算
这道题一开始就采用将一万个解的表打好的话,虽然时间效率比较高,但是内存占用太大,就MLE 这里写好大数后,每次输入一个n,然后再老老实实一个个求阶层就好 java代码: /** * @(#)Main. ...
- [luoguP1026] 统计单词个数(DP)
传送门 题解 #include <cstdio> #include <cstring> #define max(x, y) ((x) > (y) ? (x) : (y)) ...