• c#,自定义安装,部署,创建自定义操作,自定义操作,安装验证,数据库,安装授权码,接收输入,判断 Virus


    最近做一个项目的安装部署程序,要求有安装的验证,安装的授权,要输入授权吗才可以安装,禁止非法安装。
    一开始看见用户界面不错,可是添加了用户界面不能控制他,只能接受输入,然后根据输入创建数据库,修改配置之类的东西,网上的资料也多是这类型的,我就自己写了一个,还不是不太满意的,这些窗体都是在安装的过程中弹出来的,我本意是想在安装之前就验证这些内容,可是弄不出来,不知道大家有没有什么好的办法。

    installer1.JPG

    installer2.JPG

    这是需要验证的两个部分,两个自定义的窗体,代码如下:
    installer类的代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration.Install;
    using System.Windows.Forms;

    namespace FactorySetupClassLibrary
    {
        [RunInstaller(
    true)]
        
    public partial class Installer1 : Installer
        
    {
            
    private string dbServer;
            
    private string loginUser;
            
    private string password;
            
    private string db;

            
    public Installer1()
            
    {
                InitializeComponent();
            }

            
    public override void Install(System.Collections.IDictionary stateSaver)
            
    {
                
    base.Install(stateSaver);
                
    //AuthorizeForm1 authForm = new AuthorizeForm1();
                
    //authForm.ShowDialog();
                DBForm1 dbForm = new DBForm1();
                
    if (dbForm.ShowDialog() == DialogResult.OK)
                
    {
                    
                }

                
    else
                
    {
                    
    throw new ApplicationException("应用程序安装失败");
                }


                AuthorizeForm1 authForm 
    = new AuthorizeForm1();
                
    if (authForm.ShowDialog() == DialogResult.OK)
                
    {

                }

                
    else
                
    {
                    
    throw new ApplicationException("应用程序安装失败");
                }

            }

        }

    }
    数据库验证窗体的代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;

    namespace FactorySetupClassLibrary
    {
        
    public partial class DBForm1 : Form
        
    {
            SqlConnection conn
    =null;
            
    public DBForm1()
            
    {
                InitializeComponent();
            }


            
    private void DBForm1_Load(object sender, EventArgs e)
            
    {
                txtDB.Text 
    = "KBUdiskFactoryTools";
                txtDB.Enabled 
    = false;
                txtDBServer.Focus();
            }


            
    private void btnOK_Click(object sender, EventArgs e)
            
    {
                
    if (ValidatingHelper.ValidatingTextBox(txtDBServer, 100"数据库服务器", lblDBServer) == false)
                    
    return;
                
    if (ValidatingHelper.ValidatingTextBox(txtLoginName, 100"登录用户名", lblLoginName) == false)
                    
    return;
                
    if (ValidatingHelper.ValidatingTextBox(txtPassword, 100"登录密码", lblPassword) == false)
                    
    return;
                
    try
                
    {
                    
    using (conn = new SqlConnection("server=" + txtDBServer.Text.Trim() + ";uid=" + txtLoginName.Text.Trim() +
                    
    ";pwd=" + txtPassword.Text.Trim() + ";database=" + txtDB.Text.Trim()))
                    
    {
                        conn.Open();
                        conn.Close();
                        
    this.DialogResult = DialogResult.OK;
                    }

                }

                
    catch
                
    {
                    
    if (conn.State != ConnectionState.Closed)
                        conn.Close();
                    
    this.DialogResult = DialogResult.Cancel;
                }

                
    finally
                
    {
                    
    if (conn.State != ConnectionState.Closed)
                        conn.Close();
                }

            }


            
    private void btnTestConnection_Click(object sender, EventArgs e)
            
    {
                
    if (ValidatingHelper.ValidatingTextBox(txtDBServer, 100"数据库服务器", lblDBServer) == false)
                    
    return;
                
    if (ValidatingHelper.ValidatingTextBox(txtLoginName, 100"登录用户名", lblLoginName) == false)
                    
    return;
                
    if (ValidatingHelper.ValidatingTextBox(txtPassword, 100"登录密码", lblPassword) == false)
                    
    return;
                
    try
                
    {
                    
    using (conn = new SqlConnection("server=" + txtDBServer.Text.Trim() + ";uid=" + txtLoginName.Text.Trim() +
                    
    ";pwd=" + txtPassword.Text.Trim() + ";database=" + txtDB.Text.Trim()))
                    
    {
                        conn.Open();
                        conn.Close();
                        MessageBox.Show(
    "连接成功,可以点击确定按钮继续安装");
                    }

                }

                
    catch
                
    {
                    
    if (conn.State != ConnectionState.Closed)
                        conn.Close();
                    MessageBox.Show(
    "连接失败,请检查连接设置之后继续安装");
                }

                
    finally
                
    {
                    
    if (conn.State != ConnectionState.Closed)
                        conn.Close();
                }

            }


            
    private void btnCancel_Click(object sender, EventArgs e)
            
    {
                
    this.DialogResult = DialogResult.Cancel;
            }

        }

    }
    授权码验证窗体代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;


    namespace FactorySetupClassLibrary
    {
        
    public partial class AuthorizeForm1 : Form
        
    {

            
    private Hasher _hasher = null;
            
    private int _randomInt;
            
    public AuthorizeForm1()
            
    {
                InitializeComponent();

                _hasher 
    = new Hasher();
            }


            
    private void AuthorizeForm1_Load(object sender, EventArgs e)
            
    {
                Random random 
    = new Random();
                _randomInt 
    = random.Next(999999999);
                
    //this._hasher.HashText = this._computerInfo.GetCPUSn() + this._computerInfo.GetHardDriveSn() +
                
    //    this._computerInfo.GetMacAddress() + this._computerInfo.GetMainBoardId() + this._randomInt.ToString();
                this._hasher.HashText = ComputerInfo.GetManchineCPU() + ComputerInfo.GetMachineHardDiskNumber() +
                    ComputerInfo.GetMachineMac() 
    + ComputerInfo.GetMainBoardId() + this._randomInt.ToString();

                txtApplyCode.Text 
    = this._hasher.MD5Hasher();
                txtApplyCode.Enabled 
    = false;
            }


            
    private void btnOK_Click(object sender, EventArgs e)
            
    {
                
    if (txtAuthorizeCode.Text == "")
                
    {
                    errorProvider1.SetError(lblAuthCode, 
    "请输入授权码");
                    txtAuthorizeCode.Focus();
                    
    return;
                }

                
    else if (txtAuthorizeCode.TextLength != 24)
                
    {
                    errorProvider1.SetError(lblAuthCode, 
    "请输入24位的授权码");
                    txtAuthorizeCode.SelectAll();
                    txtAuthorizeCode.Focus();
                    
    return;
                }

                
    else
                
    {
                    errorProvider1.SetError(lblAuthCode, 
    "");
                }

                
    //this._hasher.HashText = txtApplyCode.Text.Trim();
                Hasher hasher = new Hasher();
                hasher.HashText 
    = txtApplyCode.Text.Trim();

                
    //MessageBox.Show("申请码:"+txtApplyCode.Text.Trim()+"授权码:"+hasher.MD5Hasher()+"输入的授权码:"+txtAuthorizeCode.Text.Trim());
           

                
    if (hasher.MD5Hasher().Equals(txtAuthorizeCode.Text.Trim()))
                    
    this.DialogResult = DialogResult.OK;
                
    else
                    
    this.DialogResult = DialogResult.Cancel;
            }


            
    private void btnCancel_Click(object sender, EventArgs e)
            
    {
                
    this.DialogResult = DialogResult.Cancel;
            }

        }

    }

    两个帮助类,一个是加密类,一个是输入验证类

    using System;
    using System.IO;
    using System.Security.Cryptography;

    namespace FactorySetupClassLibrary
    {
        
    /**/
        
    /// <summary>
        
    ///Copyright (C), 2004, kwklover(邝伟科)
        
    ///File name:Hasher.cs
        
    ///Author:邝伟科     Version:1.0        Date:2004年4月22日
        
    ///Description:哈希(不可逆)加密通用类库函数
        
    /// </summary>

        public class Hasher
        
    {
            
    private byte[] _HashKey;   //哈希密钥存储变量
            private string _HashText;  //待加密的字符串
            public Hasher()
            
    {
                
    //
                
    // TODO: 在此处添加构造函数逻辑
                
    //
            }

            
    /// <summary>
            
    /// 带参数构造函数
            
    /// </summary>
            
    /// <param name="hashText">待加密的字符串</param>

            public Hasher(string hashText)
            
    {
                
    this._HashText = hashText;
            }

            
    /**/
            
    /// <summary>
            
    /// 哈希密钥
            
    /// </summary>

            public byte[] HashKey
            
    {
                
    set
                
    {
                    _HashKey 
    = value;
                }

                
    get
                
    {
                    
    return _HashKey;
                }

            }


            
    /**/
            
    /// <summary>
            
    /// 需要产生加密哈希的字符串
            
    /// </summary>

            public string HashText
            
    {
                
    set
                
    {
                    _HashText 
    = value;
                }

                
    get
                
    {
                    
    return _HashText;
                }

            }


            
    /**/
            
    /// <summary>
            
    /// 使用HMACSHA1类产生长度为 20 字节的哈希序列。需提供相应的密钥,接受任何大小的密钥。
            
    /// </summary>
            
    /// <returns></returns>

            public string HMACSHA1Hasher()
            
    {
                
    byte[] HmacKey = HashKey;
                
    byte[] HmacData = System.Text.Encoding.UTF8.GetBytes(HashText);

                HMACSHA1 Hmac 
    = new HMACSHA1(HmacKey);

                CryptoStream cs 
    = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);
                cs.Write(HmacData, 
    0, HmacData.Length);
                cs.Close();

                
    byte[] Result = Hmac.Hash;

                
    return Convert.ToBase64String(Result);  //返回长度为28字节字符串
            }


            
    /**/
            
    /// <summary>
            
    /// 使用MACTripleDES类产生长度为 8 字节的哈希序列。需提供相应的密钥,密钥长度可为 8、16 或 24 字节的密钥。
            
    /// </summary>
            
    /// <returns></returns>

            public string MACTripleDESHasher()
            
    {
                
    byte[] MacKey = HashKey;
                
    byte[] MacData = System.Text.Encoding.UTF8.GetBytes(HashText);

                MACTripleDES Mac 
    = new MACTripleDES(MacKey);

                
    byte[] Result = Mac.ComputeHash(MacData);

                
    return Convert.ToBase64String(Result);  //返回长度为12字节字符串
            }


            
    /**/
            
    /// <summary>
            
    /// 使用MD5CryptoServiceProvider类产生哈希值。不需要提供密钥。
            
    /// </summary>
            
    /// <returns></returns>

            public string MD5Hasher()
            
    {
                
    byte[] MD5Data = System.Text.Encoding.UTF8.GetBytes(HashText);

                MD5 Md5 
    = new MD5CryptoServiceProvider();

                
    byte[] Result = Md5.ComputeHash(MD5Data);

                
    return Convert.ToBase64String(Result); //返回长度为25字节字符串
            }


            
    /**/
            
    /// <summary>
            
    /// 使用SHA1Managed类产生长度为160位哈希值。不需要提供密钥。
            
    /// </summary>
            
    /// <returns></returns>

            public string SHA1ManagedHasher()
            
    {
                
    byte[] SHA1Data = System.Text.Encoding.UTF8.GetBytes(HashText);

                SHA1Managed Sha1 
    = new SHA1Managed();

                
    byte[] Result = Sha1.ComputeHash(SHA1Data);

                
    return Convert.ToBase64String(Result); //返回长度为28字节的字符串
            }


            
    /**/
            
    /// <summary>
            
    /// 使用SHA256Managed类产生长度为256位哈希值。不需要提供密钥。
            
    /// </summary>
            
    /// <returns></returns>

            public string SHA256ManagedHasher()
            
    {
                
    byte[] SHA256Data = System.Text.Encoding.UTF8.GetBytes(HashText);

                SHA256Managed Sha256 
    = new SHA256Managed();

                
    byte[] Result = Sha256.ComputeHash(SHA256Data);

                
    return Convert.ToBase64String(Result);  //返回长度为44字节的字符串
            }


            
    /**/
            
    /// <summary>
            
    /// 使用SHA384Managed类产生长度为384位哈希值。不需要提供密钥。
            
    /// </summary>
            
    /// <returns></returns>

            public string SHA384ManagedHasher()
            
    {
                
    byte[] SHA384Data = System.Text.Encoding.UTF8.GetBytes(HashText);

                SHA384Managed Sha384 
    = new SHA384Managed();

                
    byte[] Result = Sha384.ComputeHash(SHA384Data);

                
    return Convert.ToBase64String(Result);  //返回长度为64字节的字符串
            }


            
    /**/
            
    /// <summary>
            
    /// 使用SHA512Managed类产生长度为512位哈希值。不需要提供密钥。
            
    /// </summary>
            
    /// <returns></returns>

            public string SHA512ManagedHasher()
            
    {
                
    byte[] SHA512Data = System.Text.Encoding.UTF8.GetBytes(HashText);

                SHA512Managed Sha512 
    = new SHA512Managed();

                
    byte[] Result = Sha512.ComputeHash(SHA512Data);

                
    return Convert.ToBase64String(Result);  //返回长度为88字节的字符串
            }

        }

    }




    文本框输入内容验证类

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;

    namespace FactorySetupClassLibrary
    {
        
    /// <summary>
        
    /// 输入验证帮助类
        
    /// </summary>

       public  class ValidatingHelper
        
    {
           
    /// <summary>
           
    /// 验证输入文本框控件
           
    /// </summary>
           
    /// <param name="validatedControl">需要验证的控件</param>
           
    /// <param name="length">输入长度</param>
           
    /// <param name="msg">文本框的验证内容</param>
           
    /// <param name="msgControl">显示错误信息的控件</param>
           
    /// <returns></returns>

           public static bool ValidatingTextBox(Control validatedControl,int length, string msg, Control msgControl)
           
    {
               ErrorProvider error 
    = new ErrorProvider();
               
    if (validatedControl.Text == "")
               
    {
                   error.SetError(msgControl, 
    "请输入" + msg);
                   validatedControl.Focus();
                   
    return false;
               }

               
    else 
               
    {
                   error.SetError(msgControl, 
    "");
                   
    return true;
               }


           }

        }

    }






    【Blog】http://virusswb.cnblogs.com/

    【MSN】jorden008@hotmail.com

    【说明】转载请标明出处,谢谢

    反馈文章质量,你可以通过快速通道评论:

  • 相关阅读:
    微信小程序上拉分页
    关于检测数据类型,三种方法(typeof,instanceof,Object.prototype.toString.call())优缺点
    如何在Devc++中配置OpenCv
    数据库系统和应用
    这是一篇测试文档
    Pandas 表格合并
    es6一些好用的方法总结
    前端面试题
    超有趣! JS是怎么计算1+2!!!
    彻底理解闭包
  • 原文地址:https://www.cnblogs.com/virusswb/p/1238819.html
Copyright © 2020-2023  润新知