using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using System.Text; using System.Xml; using System.Security.Cryptography;
namespace writeconfig { /// <summary> /// Form1 的摘要说明。 /// </summary> public class frmMain : System.Windows.Forms.Form { private System.Windows.Forms.Label labserver; private System.Windows.Forms.Label labdatabase; private System.Windows.Forms.Label labuser; private System.Windows.Forms.Label labpassword; private System.Windows.Forms.TextBox txtserver; private System.Windows.Forms.TextBox txtdatabase; private System.Windows.Forms.TextBox txtuser; private System.Windows.Forms.TextBox txtpassword; private System.Windows.Forms.Button btnRead; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox txtfile; private System.Windows.Forms.Button btnWrite; private System.Windows.Forms.Button btnLook; private System.Windows.Forms.OpenFileDialog ofd; private System.Windows.Forms.Label labkey; private System.Windows.Forms.TextBox txtkey; private FileInfo fi; private bool Find; private string password=""; protected string keypassword=""; private System.Windows.Forms.Button btnDeleteNode; /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null;
public frmMain() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); int[] tmp=new int[8]{23,234,195,165,201,240,143,198}; foreach(int i in tmp) { keypassword+=((char)i).ToString(); } }
/// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }
#region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(frmMain)); this.labserver = new System.Windows.Forms.Label(); this.labdatabase = new System.Windows.Forms.Label(); this.labuser = new System.Windows.Forms.Label(); this.labpassword = new System.Windows.Forms.Label(); this.txtserver = new System.Windows.Forms.TextBox(); this.txtdatabase = new System.Windows.Forms.TextBox(); this.txtuser = new System.Windows.Forms.TextBox(); this.txtpassword = new System.Windows.Forms.TextBox(); this.btnRead = new System.Windows.Forms.Button(); this.btnWrite = new System.Windows.Forms.Button(); this.txtfile = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.btnLook = new System.Windows.Forms.Button(); this.ofd = new System.Windows.Forms.OpenFileDialog(); this.labkey = new System.Windows.Forms.Label(); this.txtkey = new System.Windows.Forms.TextBox(); this.btnDeleteNode = new System.Windows.Forms.Button(); this.SuspendLayout(); // // labserver // this.labserver.Location = new System.Drawing.Point(21, 57); this.labserver.Name = "labserver"; this.labserver.Size = new System.Drawing.Size(87, 14); this.labserver.TabIndex = 0; this.labserver.Text = "服务器:"; // // labdatabase // this.labdatabase.Location = new System.Drawing.Point(21, 93); this.labdatabase.Name = "labdatabase"; this.labdatabase.Size = new System.Drawing.Size(87, 14); this.labdatabase.TabIndex = 1; this.labdatabase.Text = "数据源:"; // // labuser // this.labuser.Location = new System.Drawing.Point(21, 129); this.labuser.Name = "labuser"; this.labuser.Size = new System.Drawing.Size(87, 14); this.labuser.TabIndex = 2; this.labuser.Text = "用户名:"; // // labpassword // this.labpassword.Location = new System.Drawing.Point(21, 165); this.labpassword.Name = "labpassword"; this.labpassword.Size = new System.Drawing.Size(87, 14); this.labpassword.TabIndex = 3; this.labpassword.Text = "密 码:"; // // txtserver // this.txtserver.Location = new System.Drawing.Point(117, 50); this.txtserver.Name = "txtserver"; this.txtserver.Size = new System.Drawing.Size(187, 25); this.txtserver.TabIndex = 4; this.txtserver.Text = ""; // // txtdatabase // this.txtdatabase.Location = new System.Drawing.Point(117, 86); this.txtdatabase.Name = "txtdatabase"; this.txtdatabase.Size = new System.Drawing.Size(187, 25); this.txtdatabase.TabIndex = 4; this.txtdatabase.Text = ""; // // txtuser // this.txtuser.Location = new System.Drawing.Point(117, 122); this.txtuser.Name = "txtuser"; this.txtuser.Size = new System.Drawing.Size(187, 25); this.txtuser.TabIndex = 4; this.txtuser.Text = ""; // // txtpassword // this.txtpassword.Location = new System.Drawing.Point(117, 158); this.txtpassword.Name = "txtpassword"; this.txtpassword.PasswordChar = '*'; this.txtpassword.Size = new System.Drawing.Size(187, 25); this.txtpassword.TabIndex = 4; this.txtpassword.Text = ""; this.txtpassword.TextChanged += new System.EventHandler(this.txtpassword_TextChanged); // // btnRead // this.btnRead.Location = new System.Drawing.Point(320, 154); this.btnRead.Name = "btnRead"; this.btnRead.Size = new System.Drawing.Size(100, 29); this.btnRead.TabIndex = 5; this.btnRead.Text = "读配置"; this.btnRead.Click += new System.EventHandler(this.btnRead_Click); // // btnWrite // this.btnWrite.Location = new System.Drawing.Point(320, 191); this.btnWrite.Name = "btnWrite"; this.btnWrite.Size = new System.Drawing.Size(100, 28); this.btnWrite.TabIndex = 5; this.btnWrite.Text = "写配置"; this.btnWrite.Click += new System.EventHandler(this.btnWrite_Click); // // txtfile // this.txtfile.Location = new System.Drawing.Point(117, 14); this.txtfile.Name = "txtfile"; this.txtfile.Size = new System.Drawing.Size(187, 25); this.txtfile.TabIndex = 6; this.txtfile.Text = "请选择目录下Web.config文件"; // // label1 // this.label1.Location = new System.Drawing.Point(21, 21); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(96, 14); this.label1.TabIndex = 3; this.label1.Text = "配置文件:"; // // btnLook // this.btnLook.Location = new System.Drawing.Point(320, 13); this.btnLook.Name = "btnLook"; this.btnLook.Size = new System.Drawing.Size(100, 28); this.btnLook.TabIndex = 7; this.btnLook.Text = "浏览..."; this.btnLook.Click += new System.EventHandler(this.btnLook_Click); // // ofd // this.ofd.Filter = "Web配置文件|web.config"; // // labkey // this.labkey.Location = new System.Drawing.Point(21, 201); this.labkey.Name = "labkey"; this.labkey.Size = new System.Drawing.Size(96, 14); this.labkey.TabIndex = 3; this.labkey.Text = "读写节值:"; // // txtkey // this.txtkey.Location = new System.Drawing.Point(117, 194); this.txtkey.Name = "txtkey"; this.txtkey.Size = new System.Drawing.Size(187, 25); this.txtkey.TabIndex = 4; this.txtkey.Text = "ConnStr"; // // btnDeleteNode // this.btnDeleteNode.Location = new System.Drawing.Point(320, 119); this.btnDeleteNode.Name = "btnDeleteNode"; this.btnDeleteNode.Size = new System.Drawing.Size(100, 28); this.btnDeleteNode.TabIndex = 5; this.btnDeleteNode.Text = "删除节"; this.btnDeleteNode.Visible = false; this.btnDeleteNode.Click += new System.EventHandler(this.btnDeleteNode_Click); // // frmMain // this.AutoScaleBaseSize = new System.Drawing.Size(8, 18); this.ClientSize = new System.Drawing.Size(437, 239); this.Controls.Add(this.btnLook); this.Controls.Add(this.txtfile); this.Controls.Add(this.btnRead); this.Controls.Add(this.txtserver); this.Controls.Add(this.labpassword); this.Controls.Add(this.labuser); this.Controls.Add(this.labdatabase); this.Controls.Add(this.labserver); this.Controls.Add(this.txtdatabase); this.Controls.Add(this.txtuser); this.Controls.Add(this.txtpassword); this.Controls.Add(this.btnWrite); this.Controls.Add(this.label1); this.Controls.Add(this.labkey); this.Controls.Add(this.txtkey); this.Controls.Add(this.btnDeleteNode); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "frmMain"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "数据库连接配置"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false);
} #endregion
/// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.Run(new frmMain()); }
private void Form1_Load(object sender, System.EventArgs e) { }
private void btnLook_Click(object sender, System.EventArgs e) { ofd.ShowDialog(); txtfile.Text=ofd.FileName; }
private bool inittxtfile() { txtfile.Text=txtfile.Text.Trim(); if(txtfile.Text=="") { txtfile.Text=System.Environment.CurrentDirectory+@"\web.config"; } fi=new FileInfo(txtfile.Text); if(!fi.Exists) { MessageBox.Show("没有找到配置文件!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error); return false; } else { return true; }
} private void btnWrite_Click(object sender, System.EventArgs e) { if(!inittxtfile()) { return; } if((txtserver.Text.Trim()=="")||(txtdatabase.Text.Trim()=="")||(txtuser.Text.Trim()=="")) { MessageBox.Show("写配置失败,配置信息不完整!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } Find=false; XmlDocument xd=new XmlDocument(); xd.Load(fi.FullName); XmlNodeList nodeList=null; try { nodeList=xd.SelectSingleNode("/configuration/appSettings").ChildNodes; //获取appSettings节点的所有子节点 } catch { MessageBox.Show("写配置失败,未找到配置节!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } //连接字符串 string orgstr="server="+txtserver.Text.Trim()+";u; string str= Encrypt(orgstr,keypassword);
foreach(XmlNode Node in nodeList) { XmlElement xe=(XmlElement)Node; //将子节点类型转换为XmlElement类型 if(xe.GetAttribute("key")==txtkey.Text.Trim()) { xe.Attributes["value"].Value = str; Find=true; break; } } if(Find) { xd.Save(txtfile.Text); MessageBox.Show("写配置成功!","配置成功",MessageBoxButtons.OK,MessageBoxIcon.Information); } else { //未找到节点,建立节点 XmlNode xn=xd.SelectSingleNode("/configuration/appSettings"); XmlElement elem = xd.CreateElement("and"); elem.SetAttribute("key",txtkey.Text.Trim()); elem.SetAttribute("value",str); try { xn.AppendChild(elem); xd.Save(fi.FullName); MessageBox.Show("写配置成功!","配置成功",MessageBoxButtons.OK,MessageBoxIcon.Information); } catch { MessageBox.Show("写配置失败,可能文件权限不够!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error); } } }
private void btnRead_Click(object sender, System.EventArgs e) { if(!inittxtfile()) { return; } Find=false; XmlDocument xd=new XmlDocument(); xd.Load(fi.FullName); XmlNodeList nodeList=null; try { nodeList=xd.SelectSingleNode("/configuration/appSettings").ChildNodes; //获取appSettings节点的所有子节点 } catch { MessageBox.Show("读配置失败,未找到配置节!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } string readstr=""; foreach(XmlNode Node in nodeList) { XmlElement xe=(XmlElement)Node; //将子节点类型转换为XmlElement类型 if(xe.GetAttribute("key")==txtkey.Text.Trim()) { readstr=xe.Attributes["value"].Value; Find=true; break; } } if(!Find) { MessageBox.Show("读配置失败,未找到配置节!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } #region 读配置并解析 string connstr=Decrypt(readstr,keypassword); string [] tmp2=connstr.Split(new char[]{';','='}); for(int i=0;i<tmp2.Length;i+=2) { if((tmp2[i].ToLower()=="server")||(tmp2[i].ToLower()=="data source")) { txtserver.Text=tmp2[i+1]; } else if((tmp2[i].ToLower()=="uid")||(tmp2[i].ToLower()=="userid")) { txtuser.Text=tmp2[i+1]; } else if((tmp2[i].ToLower()=="database")||(tmp2[i].ToLower()=="initial catalog")) { txtdatabase.Text=tmp2[i+1]; } else if((tmp2[i].ToLower()=="pwd")||(tmp2[i].ToLower()=="password")) { txtpassword.Text="*******************"; password=tmp2[i+1]; } continue;
} #endregion } #region 加密方法 public string Encrypt(string pToEncrypt, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//建立加密对象的密钥和偏移量 //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 //使得输入密码必须输入英文文本 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); foreach(byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } #endregion #region 解密方法 public string Decrypt(string pToDecrypt, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; for(int x = 0; x < pToDecrypt.Length / 2; x++) { int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; }
//建立加密对象的密钥和偏移量,此值重要,不能修改 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock();
//建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray()); } #endregion private void txtpassword_TextChanged(object sender, System.EventArgs e) { password=txtpassword.Text.Trim(); }
private void btnDeleteNode_Click(object sender, System.EventArgs e) { if(!inittxtfile()) { return; } XmlDocument xd=new XmlDocument(); xd.Load(fi.FullName);
XmlNodeList nodeList=null; try { nodeList=xd.SelectSingleNode("/configuration/appSettings").ChildNodes; //获取appSettings节点的所有子节点 } catch { MessageBox.Show("删除配置节失败,未找到配置节!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } int ClearNodes=0; foreach(XmlNode Node in nodeList) { XmlElement xe=(XmlElement)Node; //将子节点类型转换为XmlElement类型 if(xe.GetAttribute("key")==txtkey.Text.Trim()) { Node.RemoveAll(); ClearNodes++; } } if(ClearNodes>0) { xd.Save(txtfile.Text); MessageBox.Show("删除配置节成功!","删除成功",MessageBoxButtons.OK,MessageBoxIcon.Information); } } } }
|
请发表评论