一种软件授权方法

本文介绍了如何在C#桌面应用中实现软件授权,利用硬盘卷标号和当前时间生成唯一的授权码,只有在授权文件存在且未过期时,用户才能正常使用软件。
摘要由CSDN通过智能技术生成

        有时候我们开发了一款软件并提供客户使用,但又不希望被随便拷贝传播,这时候就需要增加软件授权功能。

        我们的目的很明确,只允许被授权的电脑使用,禁止拷贝传播。

        那么我们只要找到电脑里具有独一无二的特征就可以了,这样的特征信息其实很多,CPU,硬盘,网卡MAC等都是独一无二的,这里我们就只使用硬盘的方式作为示范。

        使用VS新建的C#桌面项目,应用程序入口main()函数,它是在Program.cs里,可以看到默认的main()函数里直接启动uart窗体了。

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new uart());
}

        如果我们需要增加授权的话,可以在Application.Run(new uart())前面增加授权判断功能,这里我们只使用了C盘的方式。

//取得设备硬盘的卷标号
public static string GetDiskVolumeSerialNumber()
{
    ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid='C:'");
    disk.Get();
    return disk.GetPropertyValue("VolumeSerialNumber").ToString();
}

        现在,在Application.Run(new uart())前,我们先判断一下授权文件是否存在,如果存在则启动窗体,否则要求授权。授权成功后会生成一个授权文件,授权的方式可以自己设定,我这里就直接用当前时间和C盘序列号换算成数值相加了。事实上,我们还可以在这里设定授权的有效期,即授权了也不能永久使用。话不多说,看代码。

if (System.IO.File.Exists(passfilename) == true)
{
    StreamReader read = new StreamReader(passfilename, System.Text.Encoding.GetEncoding("GB2312"));
    string time = read.ReadLine();
    read.Close();
    DateTime registerTime = Convert.ToDateTime(time);
    DateTime deadline = registerTime.AddYears(1);//设定有效期一年

    if (DateTime.Compare(DateTime.Now, deadline) < 0)
    {
       Application.Run(new uart());
    }
    else/*此段不添加则过期永久失效*/
    {
       string disknumstr = GetDiskVolumeSerialNumber();
       string pass = Interaction.InputBox("Software Has Expired,You Need To Register\r\nYour UserID Is " + disknumstr + "\r\nInput Your Key", "Key", "", 600, 400);
       ulong disknum = Convert.ToUInt64(disknumstr, 16);
       ulong timenum = (UInt64)DateTime.Now.Date.Ticks;
       ulong passnum = disknum + timenum;
       if (pass == passnum.ToString("X2"))
       {
          StreamWriter log = new StreamWriter(passfilename, false);
          log.Write(DateTime.Now.ToString());
          log.Close();
          FileInfo info = new FileInfo(passfilename);

          Application.Run(new uart());
       }
    }
}
else
{
    string disknumstr = GetDiskVolumeSerialNumber();
    string pass = Interaction.InputBox("Software Has Expired,You Need To Register\r\nYour UserID Is " + disknumstr + "\r\nInput Your Key", "Key", "", 600, 400);
    ulong disknum = Convert.ToUInt64(disknumstr, 16);
    ulong timenum = (UInt64)DateTime.Now.Date.Ticks;
    ulong passnum = disknum + timenum;
    if (pass == passnum.ToString("X2"))
    {
        StreamWriter log = new StreamWriter(passfilename, false);
        log.Write(DateTime.Now.ToString());
        log.Close();
        FileInfo info = new FileInfo(passfilename);

        Application.Run(new uart());
     }
}

        现在初次运行后会弹出如下提示,只要输入授权码后即可使用,这个弹框用到的是VB中的Interaction.InputBox,因此需要添加VB命名空间using Microsoft.VisualBasic。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕诗客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值