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


这是需要验证的两个部分,两个自定义的窗体,代码如下:
installer类的代码























































































































































































































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

























































































































































































文本框输入内容验证类






































