3.添加安装程序类文件WebInstaller.cs 里面重载Install和Uninstall方法.
using System;
using System.Data;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Collections.Specialized;
using System.Data.SqlClient;
using System.Xml;
using System.Diagnostics;
using System.IO;
using System.Web;
using System.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Windows.Forms;
namespace WebSetupLib
{
/// <summary>
/// WebInstaller 的摘要说明。
/// </summary>
[RunInstaller(true)]
public class WebInstaller : System.Configuration.Install.Installer
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public WebInstaller()
{
// 该调用是设计器所必需的。
InitializeComponent();
// TODO: 在 InitializeComponent 调用后添加任何初始化
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)
{
if(disposing)
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
public override void Install(IDictionary stateSaver)
{
bool TrustedConnection=false;
base.Install(stateSaver);
try
{
if(this.Context!=null)
{
StringDictionary parameters = Context.Parameters;
string[] keys =new string[parameters.Count];
parameters.Keys.CopyTo(keys,0);
//"把数据库/服务器名/数据库/用户名/数据库密码/安装路径写进 stateSaver"
for(int intKeys=0;intKeys<keys.Length;intKeys++)
{
if(keys[intKeys].Equals("database"))
stateSaver.Add("database", parameters[keys[intKeys]].
ToString());
else if(keys[intKeys].Equals("server"))
stateSaver.Add("server", parameters[keys[intKeys]].
ToString());
else if(keys[intKeys].Equals("username"))
stateSaver.Add("username", parameters[keys[intKeys]].
ToString());
else if(keys[intKeys].Equals("password"))
stateSaver.Add("password", parameters[keys[intKeys]].
ToString());
else if(keys[intKeys].Equals("target"))
stateSaver.Add("target", parameters[keys[intKeys]].
ToString());
}
//测试连接
string connectionstring= "Data Source=" + stateSaver["server"].
ToString() ;
connectionstring+= ";Initial Catalog=" + stateSaver["database"].
ToString() ;
if(stateSaver["username"]!=null && stateSaver["username"].ToString().
Length!=0)
{
SqlConnection conn = new SqlConnection( "Data Source=" +
stateSaver["server"].ToString() + ";Initial Catalog=master;
User Id=" + stateSaver["username"].ToString() + ";
Password=" + stateSaver["password"].ToString());
conn.Open();
conn.Close();
conn.Dispose();
connectionstring += ";User ID=" + stateSaver["username"].
ToString() ;
connectionstring += ";Password=" + stateSaver["password"].
ToString() ;
}
else
{
SqlConnection conn = new SqlConnection("Data Source="+stateSaver
["server"].ToString() + ";Initial Catalog=master;trusted_
connection=yes");
conn.Open();
conn.Close();
conn.Dispose();
TrustedConnection=true;
stateSaver.Add("trustedconnection",true);
connectionstring+=";Trusted_connection=yes";
}
//把数据库连接字符串写进web.config文件.
XmlDocument doc = new XmlDocument();
doc.Load(stateSaver["target"].ToString() + @"Web.config");
XmlNode connectionNode = doc.SelectSingleNode(@"configuration/
appSettings/" + @"add[@key='DBConnString']");
if(connectionNode!=null)
{
connectionNode.Attributes["value"].Value = connectionstring;
doc.Save( stateSaver["target"].ToString() + @"Web.config");
//EventLog.WriteEntry("安装数据", "Configuration file
//processed...");
//MessageBox.Show("到这一步了吗?");
}
else
{// This error will ensure installation is uncomplete...
throw new InstallException("没有数据库连接串!");
}
//执行数据库脚本,安装数据库
DataBase dbInstall =null;
if(TrustedConnection)
{
dbInstall= new DataBase(stateSaver["server"].ToString(),
stateSaver["database"].ToString(),
stateSaver["target"].ToString());
}
else
{
dbInstall= new DataBase(stateSaver["server"].ToString(),
stateSaver["database"].ToString(),stateSaver["username"].ToString(),
stateSaver["password"].ToString(), stateSaver["target"].ToString());
}
//MessageBox.Show("到这一步了吗?");
dbInstall.CreateDataBase();
dbInstall.InsertDate();
//部署桌面快捷方式
StreamWriter sw2=System.IO.File.CreateText(Context.Parameters["des"].
ToString()+"WebDBAccess.url");
stateSaver.Add("DeskQuick",Context.Parameters["des"].ToString()+
"WebDBAccess.url"); //保存桌面快诫方式文件绝对地址
//Context.Parameters["des"].ToString()是对应的桌面地址
string webdirs=Context.Parameters["webdir"].ToString();
//Context.Parameters["webdir"].ToString()对应的路径,在安装项目里面作
//为参数传入
string webdirsNew = webdirs.Substring(0,webdirs.Length-1);
webdirs = webdirsNew.Substring(webdirsNew.LastIndexOf(@"/")+1);
string Urls=@"URL=http://localhost/"+webdirs+@"/index.aspx";
sw2.WriteLine("[InternetShortcut]");
sw2.WriteLine(Urls);
sw2.WriteLine("modified=228928983");
sw2.WriteLine("IconIndex=0");
sw2.WriteLine("IconFile="+webdirsNew+"//images//shortcut.ico");
sw2.Flush();
sw2.Close();
//部署开始菜单
string startMenue=Environment.GetFolderPath(Environment.SpecialFolder
.StartMenu);
if(File.Exists(startMenue+"//WebDBAccess.url"))
{
if(MessageBox.Show("开始菜单已经存在,是否有覆盖它?","安装开始菜
单",MessageBoxButtons.YesNo,MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1) == DialogResult.Yes)
{
File.Copy(Context.Parameters["des"].ToString()+"WebDBAccess
.url",startMenue+"//WebDBAccess.url",true);
}
else
{
throw new InstallException("开始菜单已经存在,安装取消");
}
}
else
{
File.Copy(Context.Parameters["des"].ToString()+"WebDBAccess
.url",startMenue+"//WebDBAccess.url",false);
}
stateSaver.Add("StartMenueFile",startMenue+"//WebDBAccess.url");
//保存开始菜单文件绝对地址
}
}
catch(Exception ex1)
{
throw new System.Configuration.Install.InstallException(ex1.ToString());
}
}
public override void Uninstall(IDictionary savedState)
{
try
{
if(savedState!=null)
{
base.Uninstall(savedState);
//删除桌面快捷方式,删除开始菜单快捷方式,删除数据库
//删除桌面快捷方式
if(File.Exists(savedState["DeskQuick"].ToString()))
{
File.Delete(savedState["DeskQuick"].ToString());
}
//删除开始菜单快捷方式
if(File.Exists(savedState["StartMenueFile"].ToString()))
{
File.Delete(savedState["StartMenueFile"].ToString());
}
//删除数据库
if(MessageBox.Show("要删除数据库吗?" +savedState["database"].ToString
()+"./n ","确认删除数据库,MessageBoxButtons.YesNo,MessageBoxIcon
.Question ,MessageBoxDefaultButton.Button2)== DialogResult.No)
{
return;
}
DataBase dbInstall=null;
if(savedState["trustedconnection"]!=null && (bool)savedState["
trustedconnection"])
{
dbInstall=new DataBase(savedState["server"].ToString(),savedState
["database"].ToString(),savedState["target"].ToString());
}
else
{
dbInstall= new DataBase(savedState["server"].ToString(),
savedState["database"].ToString(),savedState["username"].
ToString(),savedState["password"].ToString(),savedState
["target"].ToString());
}
dbInstall.DropDataBase();
}
else
{
MessageBox.Show("Saved state was nullsome error.");
throw new ApplicationException("卸载需要的参数不存在!");
}
}
catch(InstallException inst)
{
throw new InstallException(inst.Message);
}
catch(Exception generic)
{
throw new InstallException(generic.Message);
}
}
}
}