以前没有动手做过安装包,所以第一次做还是费了不少劲,最近在网上也查看了很多资料,这里也想总结一下。
(1)新建安装项目setup1,填写名称和位置:
(2)在解决方案中右键点击项目选择“视图->文件系统”:
(3)选择应用程序文件夹,右键“添加->文件”,添加安装所需要的可执行文件、图片、dll文件等。
(4)在应用程序文件夹的文件安装属性里设置安装目录DefaultLocation,也可以用默认的。
(5)点击exe文件创建快捷方式,分别粘贴至用户的“程序”菜单和用户桌面,这样安装后就会出现在开始程序菜单里和桌面上,建议在用户的程序菜单下建一个文件夹,
将快捷方式放在文件夹中,可以修改快捷方式的属性,为快捷方式添加图标和修改显示的名称,这里就简单写写了。
(6)最后生成解决方案,一个简单的安装包就做好了。
注:当然一个完整的安装包光这点是远远不够的,本人也在学习当中,比如: 1 卸载:可以在应用程序文件夹中添加msiexec.exe文件,创建快捷方式,更改此快捷方式的Arguments 为"/x {产品id}",产品id的值
为打包項目的ProductCode属性值. 也可以添加一个安装程序,通过程序来实现卸载功能;2 自动添加数据库:新建一个类库,添加一个安装程序,在安装程序中重写Install(IDictionary stateSaver),修改配置
文件,添加数据库操作;3 根据需要添加用户界面、用户自定义操作等,剩下的这里就不罗列了。实现一个功能方法有很多种,关键要看自己需要的是什么,什么样的方法适合自己的项目。这里有一篇讲的很详细,
http://www.cnblogs.com/aaa6818162/archive/2009/08/06/1540489.html。下面是是一段数据库自动
附加的代码:
namespace ClassLibrary1 { [RunInstaller(true)] public partial class Installer1 : Installer { public Installer1() { InitializeComponent(); } public override void Install(IDictionary stateSaver) { base.Install(stateSaver); //修改配置信息 System.IO.FileInfo fileInfo = new FileInfo(this.Context.Parameters["targetdir"] + "\\DbConfig.xml"); if (!fileInfo.Exists) { throw new InstallException("没有找到配置信息!"); } try { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(fileInfo.FullName); foreach (XmlNode node in xmlDocument.ChildNodes) { if (node.Name == "SystemProperty") { node.Attributes.GetNamedItem("ConnectionString").Value = string.Format("server={0};User ID={1};Password={2};Initial Catalog = database_bak; Integrated security = true", this.Context.Parameters["server"], this.Context.Parameters["user"], this.Context.Parameters["pwd"]); } } xmlDocument.Save(fileInfo.FullName); //xmlDocument.Save(this.Context.Parameters["targetdir"] + "DbConfig.xml"); } catch (Exception ex) { MessageBox.Show(ex.ToString() + "数据库配置修改失败!"); } //附加数据库 try { SqlConnection myCon = new System.Data.SqlClient.SqlConnection(string.Format("server=LOCALHOST\\SQLEXPRESS;User ID={0};Password={1};Integrated security = true", this.Context.Parameters["user"], this.Context.Parameters["pwd"])); myCon.Open(); SqlCommand myCom = new SqlCommand(); myCom.Connection = myCon; myCom.CommandText = string.Format("Create Database database on (filename ='{0}\\database.mdf'),(filename = '{0}\\database_log.ldf') for attach", this.Context.Parameters["targetdir"]); myCom.ExecuteNonQuery(); myCon.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString() + "数据库操作失败!"); } } } }