c#,自定义安装,部署,创建自定义操作,自定义

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

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 ;
           }


       }

    }

}






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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论