.Net用户使用期限的设置、限制通用小组件

最近比较项目组的同事都比较烦,不断的穿梭在不同的项目之间,一个人同时要兼顾多个项目的维护修改。甚至刚放下这个客户的电话,另一个客户的电话就进来了。究其原因,相比很多人都深受其苦,“收尾款”```````

看着商务部,不断发过来的项目维护文档,同时伴随着客户不断的承诺,这批维护好就结尾款。。。。我们为之奋斗了一天又一天````

终于,商务部的老大火了,为了每个客户剩余的那些尾款,投入的精力,都足赶上承接一个新的客户的项目开发精力啦。商务老大丢出很霸气的一句话,给所有在收尾款以及以后开发的新项目都加一个使用期限限制,到时不给钱就给他停了~~~

于是乎,我就负责了这个小功能的开发~~~~

思路如下:在第一次运行项目的时候,记录相应的时间戳,之后每次运行之前对比相应的时间戳,在快要到期时,每次运行都给予提醒。

在记录时间戳方面,考虑到写入系统文件和注册表,最终处于安全性选择写入注册表,在命名方面都想系统挂边,希望最大起到最大限度的迷惑性,^_^。

代码如下:

 注册表读写

 #region 写入注册表做法
//写入注册表
private static void CreateReg(bool outTime)
{
RegistryKey FaxSoftWareKey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true);
RegistryKey FAXKey = FaxSoftWareKey.OpenSubKey("System_Confine_XP", true);
if (FAXKey == null)
{
FAXKey = FaxSoftWareKey.CreateSubKey("System_Confine_XP");
FAXKey.SetValue("InstallDate", DateTime.Now.ToString());
FAXKey.SetValue("Intime", "30");
}
else
{
if (outTime)
{
FAXKey.SetValue("InstallDate", "0");
}
}
FAXKey.Close();
FaxSoftWareKey.Close();
}
//从注册表中读取数据
private string ReadReg(string regName)
{
RegistryKey FaxSoftWareKey = Registry.CurrentUser.OpenSubKey("SOFTWARE", false);
RegistryKey FAXKey = FaxSoftWareKey.OpenSubKey("System_Confine_XP");
string s_value = FAXKey.GetValue(regName).ToString();
FAXKey.Close();
FaxSoftWareKey.Close();
return s_value;
}
#endregion

同时提供下写入系统文件部分的代码,可以在winForm时用,主要起到迷惑作用,^_^.......

代码如下:

 系统文件读写

  #region 写入系统文件的做法
/// <summary>
/// 获取安装标志,如果找不到安装标识,则创建
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
protected string GetTheCreateMark(string filePath)
{ if (!File.Exists(filePath))
{
StreamWriter Fwriter = new StreamWriter(filePath);
Fwriter.WriteLine(DateTime.Now.ToString());
Fwriter.Flush();
Fwriter.Close();
File.SetAttributes(filePath, FileAttributes.Hidden);
return DateTime.Now.ToString();
}
StreamReader Freader = new StreamReader(filePath);
string txtValue = Freader.ReadLine();
Freader.Close();
return txtValue;
}
/// <summary>
/// 更改安装标识
/// </summary>
/// <param name="filePath"></param>
protected void ChangeTheCreatMark(string filePath)
{
File.SetAttributes(filePath, FileAttributes.Normal);
StreamWriter Twriter = new StreamWriter(filePath);
Twriter.WriteLine("0");
Twriter.Flush();
Twriter.Close();
File.SetAttributes(filePath, FileAttributes.Hidden);
}
#endregion

考虑到可能会运用到webform和winform中,所以把两个都做了处理。

1.webForm,利用了Golbal中Application_BeginRequest方法,在请求之前验证是否过期,同时利用Session_Start方法,在回话开启时倒计时提醒即将过期。

Webpermission类相关操作:

 WebForm验证操作类

public class Webpermission : ValidatePermission<HttpContext>, IValidatePermission<HttpContext>
{
public new void ClosedClient()
{
HttpContext.Current.Response.Write("<script language=javascript>alert('您的试用期已过,请联系本公司,获取正式版本!!');window.opener=null;window.open('','_self');window.close();</script>");
}
public new void WaringWord(string url)
{
if (Date > 0 && Date <= 10)
{
string str = "<script language=javascript>alert('您的系统使用时间剩余{0}天即将过期!!');window.location.href='{1}'</script>";
HttpContext.Current.Response.Write(string.Format(str, Date,url));
}
}
}

Golbal部分代码:

 Golbal部分代码

IValidatePermission<HttpContext> iv = new Webpermission();
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
string url = HttpContext.Current.Request.Url.ToString();
iv.WaringWord(url);
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if (!iv.Use_Time())
{
iv.ClosedClient();
}
}

2.winForm,利用应用程序主入口Main方法中验证是否过期。

WinFPermission操作类:

 WinForm操作类

public class WinFPermission : ValidatePermission<Application>, IValidatePermission<Application>
{
public new void ClosedClient()
{
MessageBox.Show("您的试用期已过,请联系本公司,获取正式版本!!");
Application.Exit();
}
public new void WaringWord(string url)
{
if (Date > 0 && Date <= 10)
{
MessageBox.Show(string.Format("您的系统使用时间剩余{0}天即将过期!!,请联系本公司,获取正式版本!!", Date));
}
}
}

Program部分代码:

 Program代码

static void Main()
{
IValidatePermission<Application> iv = new WinFPermission();
if (!iv.Use_Time())
{
iv.ClosedClient();
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm()); }

基本工作做完了,一个简单的小组件ok了,只要在后续项目中引用下,之后在相关的Golbal和program中简单的配置下就可以用起来~~~~走起~~~

.Net用户使用期限的设置、限制通用小组件的更多相关文章

  1. Resource temporarily unavailable用户的连接数设置的太小

    -bash:fork:Resource temporarily unavailable的问题   出现这个问题的原因是linux用户的连接数设置的太小,只要修改max user processes就可 ...

  2. 实际用户ID,有效用户ID及设置用户ID

    实际用户ID,有效用户ID和设置用户ID 看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解.今天好好区分了一下这几个概念并总结如下.说白了这几个U ...

  3. 百度小程序自定义通用toast组件

    百度小程序Toast组件 author: @TiffanysBear 百度小程序自定义通用toast组件 BdToast百度小程序自定义通用组件-github地址 需求 手百小程序的toast仅支持在 ...

  4. Linux通用小技能

    Linux通用小技能 前言 无论你用ubuntu还是centos,通通没问题,运维这东西,踩坑写文档就是了. 小技能 新磁盘挂载 不管是阿里云还是腾讯云,还是自己的机器,请记住这条命令. mkfs.e ...

  5. 在linux中添加ftp用户,并设置相应的权限

    在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...

  6. linux中添加ftp用户,并设置相应的权限

    在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...

  7. Linux字符界面下用户账户的设置

    在Linux系统字符界面下创建.修改以及删除用户账户主要使用useradd,usermod和userdel这3个命令. 一.创建用户账户 创建用户账户就是在系统中创建一个新账户,然后为新账户分配用户U ...

  8. [vsftp服务]——ftp虚拟用户、权限设置等的实验

    搭建ftp服务器,满足以下要求: 1.允许匿名用户登录服务器并下载文件,下载速度设置为最高2MB/s 2.不允许本地用户登录ftp服务器 3.在服务器添加虚拟用户vuser01.vuser02.vus ...

  9. 设置用户ID和设置组ID

    与一个进程关联的ID有6个或更多,如下图所示: 与每个进程相关联的用户ID和组ID 实际用户ID 实际组ID 我们实际是谁 有效用户ID 有效组ID 附加组ID 用于文件访问权限检索 保存的设置用户I ...

随机推荐

  1. SSAS系列——【08】多维数据(程序展现Cube)

    原文:SSAS系列--[08]多维数据(程序展现Cube) 1.引用DLL? 按照之前安装的MS SQLServer的步骤安装完成后,发现在新建的项目中“Add Reference”时居然找不到Mic ...

  2. 在打包程序中自动安装SQL Server数据库 .

    原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目“Setup1”安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”. 在“添加新项目”对话框中,选择“项目类型” ...

  3. POJ 2255 Tree Recovery 二叉树恢复

    一道和Leetcode的一道题目基本上一样的题目. 给出前序遍历和中序遍历序列,要求依据这些信息恢复一颗二叉树的原貌,然后按后序遍历序列输出. Leetcode上有给出后序和中序,恢复二叉树的. 只是 ...

  4. Mongodb操作之查询(循序渐进对比SQL语句)

    工具推荐:Robomongo,可自行百度寻找下载源,个人比较推荐这个工具,相比较mongoVUE则更加灵活. 集合简单查询方法 mongodb语法:db.collection.find()  //co ...

  5. 如何让Gridview在没有数据的时候显示表头(asp.net)

    原文:如何让Gridview在没有数据的时候显示表头(asp.net) 1.前言 当对GridView控件进行数据绑定时,如果绑定的记录为空,网页上就不显示GridView,造成页面部分空白,页面布局 ...

  6. 转载:善待Redis中的数据

    Redis是我们数据的保管者,我们可以随时存随时取,大的小的,重要的不重要的,它都毫无怨言的帮我们保存着,甚至有些时候,我们变得很懒,存东西进去的时候顺便还贴张纸:"过了一个星期就帮我扔了吧 ...

  7. sql 中如何取出指定行: Row_Number

    原文:sql 中如何取出指定行: Row_Number ROW_NUMBER (Transact-SQL) USE AdventureWorks2008R2;GOWITH OrderedOrders ...

  8. Java 类的成员初始化顺序

    做个简单笔录,就当是重温下基础知识. 1.先看代码: package com.test; public class Test { public static void main(String[] ar ...

  9. leetcode[73] Set Matrix Zeroes 将矩阵置零

    给定一个矩阵,把零值所在的行和列都置为零.例如: 1 2 3 1 3 1 1 1 操作之后变为 1 3 0 0 0 1 1 方法1: 赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零 ...

  10. leetcode第38题--Combination Sum

    题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C  ...