예제 #1
0
        /*
         * 更 新
         */
        public int update(Cfg2 entity)
        {
            string sql = "update cfg2 set sd=@sd,cd=@cd,ld=@ld"
                         + ",rg1=@rg1,rg3=@rg3,validateCode=@validateCode"
                         + "  where id=@id";

            SQLiteParameter[] parameters =
            {
                new SQLiteParameter("@sd",           DbType.String, 200),
                new SQLiteParameter("@cd",           DbType.String, 200),
                new SQLiteParameter("@ld",           DbType.String, 200),
                new SQLiteParameter("@rg1",          DbType.String, 200),
                new SQLiteParameter("@rg3",          DbType.String, 200),
                new SQLiteParameter("@validateCode", DbType.String, 200),
                new SQLiteParameter("@id",           DbType.Int32, 4)
            };
            parameters[0].Value = entity.sd;
            parameters[1].Value = entity.cd;
            parameters[2].Value = entity.ld;
            parameters[3].Value = entity.rg1;
            parameters[4].Value = entity.rg3;
            parameters[5].Value = entity.validateCode;
            parameters[6].Value = entity.id;
            int result = Common.SQLiteHelper.ExecuteNonQuery(sql, parameters, Common.SQLiteHelper.connectionString_reg);

            return(result);
        }
예제 #2
0
        /*
         * 提交注册码
         *
         * 1.永久注册码
         *
         * 2.有有效期的注册码
         */
        private void Reg_Submit_Button_Click(object sender, RoutedEventArgs e)
        {
            string regCodeVal = regCodeText.Text;

            if (string.IsNullOrWhiteSpace(regCodeVal))
            {
                MessageBox.Show("请填写注册码");
                return;
            }
            bool isRight = RegCodeUtil.isRightOfRegCode(regCodeVal, machineCodeVal);

            //1.注册码正确
            if (isRight)
            {
                //更新注册码到数据库,并显示注册成功
                Cfg2 cfg21 = cfg2Bll.get(1);
                cfg21.rg3 = regCodeVal;
                string validateCode1 = RegCodeUtil.generateValidateCode(cfg21, machineCodeVal);
                cfg21.validateCode = validateCode1;
                cfg2Bll.update(cfg21);

                successGrid.Visibility = Visibility.Visible;
                regGrid.Visibility     = Visibility.Collapsed;

                return;
            }



            // 2.判断是否为有效期注册码
            int limitDay = RegCodeUtil.isRightOfLimitDayRegCode(regCodeVal, machineCodeVal);

            if (limitDay <= 0)
            {
                MessageBox.Show("注册码无效,请重试");
                return;
            }
            //更新注册码到数据库
            Cfg2 cfg2 = cfg2Bll.get(1);

            cfg2.ld = EncryptionUtil.encode(limitDay.ToString(), machineCodeVal);
            string validateCode = RegCodeUtil.generateValidateCode(cfg2, machineCodeVal);

            cfg2.validateCode = validateCode;
            cfg2Bll.update(cfg2);
            //显示剩余试用天数
            TimeSpan ts1       = DateTime.Now - DateTime.Parse("1970-1-1");
            int      currDay   = (int)Math.Floor(ts1.TotalDays);
            int      leaveDays = limitDay - currDay;

            tipsLabel.Content = leaveDays + "天后,试用到期";
            tips.Visibility   = Visibility.Visible;

            successGrid.Visibility = Visibility.Visible;
            regGrid.Visibility     = Visibility.Collapsed;
        }
예제 #3
0
        /*
         * 数据完整性校验
         */
        public static Boolean validate(Cfg2 cfg2, string machineCode)
        {
            string rightVaidateCode = generateValidateCode(cfg2, machineCode);

            if (cfg2.validateCode == rightVaidateCode)
            {
                return(true);
            }

            return(false);
        }
예제 #4
0
        /*
         * 生成校验码
         */
        public static string generateValidateCode(Cfg2 cfg2, string machineCode)
        {
            string AppSecret = Md5Util.generate(Params.salt1 + machineCode + Params.salt2);
            string str       = cfg2.sd;

            str = str + "&" + cfg2.cd;
            str = str + "&" + cfg2.ld;
            str = str + "&" + cfg2.rg1;
            str = str + "&" + cfg2.rg3;
            str = str + "&" + AppSecret;

            return(Md5Util.generate(str));
        }
예제 #5
0
        //通过id获取cfg
        public Cfg2 get(int id)
        {
            String sql = "select * from cfg2 where id=@id";

            SQLiteParameter[] parameters =
            {
                new SQLiteParameter("@id", DbType.Int32, 4)
            };
            parameters[0].Value = id;

            DataTable dt = Common.SQLiteHelper.ExecuteQuery(sql, parameters, Common.SQLiteHelper.connectionString_reg);

            Cfg2 cfg = DataToEntity <Cfg2> .FillModel(dt.Rows[0]);

            return(cfg);
        }
예제 #6
0
        /*
         *  初始化
         */
        private void init()
        {
            //1.获取软件是否已注册
            Boolean b = isRegistered();

            if (b)
            {
                successGrid.Visibility = Visibility.Visible;
                regGrid.Visibility     = Visibility.Collapsed;
                return;
            }



            //2.如果未注册,则显示注册界面
            successGrid.Visibility = Visibility.Collapsed;
            regGrid.Visibility     = Visibility.Visible;
            machineCodeText.Text   = machineCodeVal;

            //获取截止日期
            int      leaveDays = 30;
            TimeSpan ts1       = DateTime.Now - DateTime.Parse("1970-1-1");
            int      currDay   = (int)Math.Floor(ts1.TotalDays);

            Cfg2 cfg2 = cfg2Bll.get(1);

            string ld = cfg2.ld;

            if (!string.IsNullOrWhiteSpace(ld))
            {
                string tmp = EncryptionUtil.decode(ld, machineCodeVal);
                if (DataUtil.isInt(tmp))
                {
                    int limitDay = int.Parse(tmp);
                    leaveDays = limitDay - currDay;
                }
            }
            rtipsLabel.Content = leaveDays + "天后,试用到期";
        }
예제 #7
0
        /*
         * 软件是否已注册
         */
        private Boolean isRegistered()
        {
            //1.获取数据库信息
            Cfg2   cfg2        = cfg2Bll.get(1);
            string machineCode = MachineCodeUtil.GetMachineCodeString();

            machineCodeVal = machineCode;

            //2.数据完整性校验
            if (RegCodeUtil.validate(cfg2, machineCode) == false)
            {
                return(false);
            }

            //3.注册码验证
            if (RegCodeUtil.isRightOfRegCode(cfg2.rg3, machineCode) == false)
            {
                return(false);
            }


            return(true);
        }
예제 #8
0
        /*
         * 更新
         */
        public Cfg2 update(Cfg2 cfg2)
        {
            int rows = cfg2Dal.update(cfg2);

            return(cfg2);
        }
예제 #9
0
        //通过id获取cfg
        public Cfg2 get(Int32 id)
        {
            Cfg2 cfg = cfg2Dal.get(id);

            return(cfg);
        }
예제 #10
0
        /*
         * 验证是否注册
         *
         * errorCode=1001,提示用户,点击关闭软件(需要注册)
         *
         * errorCode=1002,提示用户,可以继续试用(非静默试用)
         *
         * errorCode=1003,不提示用户,继续试用(静默试用)
         *
         */
        public BaseResult isReg()
        {
            BaseResult baseResult = new BaseResult();

            baseResult.result    = false;
            baseResult.errorCode = 1001;
            baseResult.message   = "未知";

            //1.获取数据库信息,并验证数据完整性
            Cfg2   cfg2        = cfg2Bll.get(1);
            string machineCode = MachineCodeUtil.GetMachineCodeString();

            //3.注册码是否存在,存在则验证
            if (!string.IsNullOrWhiteSpace(cfg2.rg3))
            {
                if (RegCodeUtil.isRightOfRegCode(cfg2.rg3, machineCode))
                {
                    baseResult.result    = true;
                    baseResult.errorCode = 0;
                    baseResult.message   = "注册码正确";
                    return(baseResult);
                }
                else
                {
                    baseResult.result    = false;
                    baseResult.errorCode = 1001;
                    baseResult.message   = "注册码无效";
                    return(baseResult);
                }
            }

            //4.验证数据库注册日期是否存在,不存在则填写
            if (!string.IsNullOrWhiteSpace(cfg2.sd))
            {
                if (cfg2.sd == "sgfdo_fdgrexfhtreKUFSSA")
                {
                    //第一次打开软件
                    TimeSpan ts1    = DateTime.Now - DateTime.Parse("1970-1-1");
                    int      regDay = (int)Math.Floor(ts1.TotalDays);
                    cfg2.sd = EncryptionUtil.encode(regDay.ToString(), machineCode);
                    cfg2.cd = cfg2.sd;
                    if (string.IsNullOrWhiteSpace(cfg2.ld))
                    {
                        int limitDay = regDay + 30;
                        cfg2.ld = EncryptionUtil.encode(limitDay.ToString(), machineCode);
                    }

                    string validateCode1 = RegCodeUtil.generateValidateCode(cfg2, machineCode);
                    cfg2.validateCode = validateCode1;
                    cfg2 = cfg2Bll.update(cfg2);
                    baseResult.result    = false;
                    baseResult.errorCode = 1003;
                    baseResult.message   = "第一次打开软件";
                    return(baseResult);
                }
            }
            else
            {
                baseResult.result    = false;
                baseResult.errorCode = 1001;
                baseResult.message   = "注册日期异常(空),试用结束";
                return(baseResult);
            }

            //2.数据完整性校验
            if (RegCodeUtil.validate(cfg2, machineCode) == false)
            {
                baseResult.result    = false;
                baseResult.errorCode = 1001;
                baseResult.message   = "数据完整性校验失败";
                return(baseResult);
            }


            //5.1 获取开始时间
            string sdStr = EncryptionUtil.decode(cfg2.sd, machineCode);

            if (!DataUtil.isInt(sdStr))
            {
                baseResult.result    = false;
                baseResult.errorCode = 1001;
                baseResult.message   = "注册日期异常(非整数),试用结束";
                return(baseResult);
            }
            else if (Int32.Parse(sdStr) < 0)
            {
                baseResult.result    = false;
                baseResult.errorCode = 1001;
                baseResult.message   = "注册日期异常(小于0),试用结束";
                return(baseResult);
            }
            int sd = DataUtil.ToInt(sdStr);

            //5.2获取数据库中截止日期
            string ldStr = EncryptionUtil.decode(cfg2.ld, machineCode);
            int    ld    = DataUtil.ToInt(ldStr);

            //5.3获取数据库中当前时间
            string cdStr_old = EncryptionUtil.decode(cfg2.cd, machineCode);
            int    cd_old    = DataUtil.ToInt(cdStr_old);

            //5.4 获取当前时间,并比较
            TimeSpan ts2 = DateTime.Now - DateTime.Parse("1970-1-1");
            int      cd  = (int)Math.Floor(ts2.TotalDays);

            if (cd_old > cd)
            {
                baseResult.result    = false;
                baseResult.errorCode = 1001;
                baseResult.message   = "计算机时间异常,试用结束";
                return(baseResult);
            }


            //6.注册日期>截止日期,试用结束
            if (cd > ld)
            {
                baseResult.result    = false;
                baseResult.errorCode = 1001;
                baseResult.message   = "试用结束";
                return(baseResult);
            }


            //7. 更新当前日期
            cfg2.cd = EncryptionUtil.encode(cd.ToString(), machineCode);
            string validateCode2 = RegCodeUtil.generateValidateCode(cfg2, machineCode);

            cfg2.validateCode = validateCode2;
            cfg2 = cfg2Bll.update(cfg2);

            //8. 剩余试用天数,当restDays<10,则弹窗提示
            int restDays = ld - cd;

            if (restDays < 10)
            {
                baseResult.result    = false;
                baseResult.errorCode = 1002;
                baseResult.message   = restDays + " 天后,试用结束";
                return(baseResult);
            }
            baseResult.result    = false;
            baseResult.errorCode = 1003;
            baseResult.message   = restDays + " 天后,试用结束";
            return(baseResult);


            //baseResult.result = false;
            //baseResult.errorCode = 1002;
            //baseResult.message = restDays + " 天后,试用结束";
            //return baseResult;
        }