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

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

    }
    }
    }
  • 相关阅读:
    git 创建项目
    【转载】Nginx-Lua模块的执行顺序
    【转】微信oauth授权过程
    vps
    【转载】centos安装字体
    【转载】TortoiseGit图标消失
    【转载】linux权限
    js 获取url 中的参数;
    手机下拉/上拉刷新(基于jq或者zepto)
    vscode快捷键
  • 原文地址:https://www.cnblogs.com/szytwo/p/2427299.html
Copyright © 2011-2022 走看看