winform程序自定义打包步骤

应该很多人都有遇到这个问题.现在给个完整的解决方案.

1.添加一个安装项目(当然你的其他项目应该都已经OK了.现在我们已经做好了一个WinUI的项目.记得要建立App.config文件,而且要有连接字符串的配置节存在.不然之后会出错.因为我没做错误处理.)

目前的App.config文件内容,connectionString值为空,需要用户在安装时输入.

 

  1. <?xml version="1.0" encoding="utf-8" ?>

     

     

  2. <configuration>

     

     

  3.   <connectionStrings>

     

     

  4.     <add name="ConnectionString" connectionString="" providerName="System.Data.SqlClient" />

     

     

  5.   </connectionStrings>

     

     

  6. </configuration>

 

复制代码

2.在安装项目中添加项目输出,如UI层,业务逻辑层,数据操作层,实体层,公共层等项目输出.

3.选中左面的用户桌面,在右边右键创建新的快捷方式.

4.生成安装项目,就可以生成安装程序了.不过还没完呢.

5.安装过程中需要用户输入连接数据库的信息或建立数据库等操作.需要对安装过程进行定制.在用户界面视图中进行.

6.添加让用户输入信息的对话框

7.修改文本框的属性.最多可以有4个文本框.定义窗口的标题(BannerText),窗口的描述信息(BodyText),各文本框标签的值(Edit_Label),对应的属性名(Edit_Property),默认值(Edit_Value),是否可见(Edit_Visible)等属性.

8.要新建一个类库项目来实现定制安装的功能.

9.建立功能实现类

10.代码如下(请注意看代码注释):

 

  1. using System;

     

     

  2. using System.Collections.Generic;

     

     

  3. using System.ComponentModel;

     

     

  4. using System.Configuration.Install;

     

     

  5. using System.Configuration;

     

     

  6. using System.Xml;

     

     

  7. using System.IO;

     

     

  8.  

     

  9. namespace SetSetup

     

     

  10. {

     

     

  11.     /// <summary>

     

     

  12.     /// 继承安装类

     

     

  13.     /// www.szitr.com

     

     

  14.     /// </summary>

     

     

  15.     [RunInstaller(true)]

     

     

  16.     public partial class SetSqlConStr : Installer

     

     

  17.     {

     

     

  18.         public SetSqlConStr()

     

     

  19.         {

     

     

  20.             InitializeComponent();

     

     

  21.         }

     

     

  22.         /// <summary>

     

     

  23.         /// 重写基类的安装方法

     

     

  24.         /// </summary>

     

     

  25.         /// <param name="stateSaver"></param>

     

     

  26.         public override void Install(System.Collections.IDictionary stateSaver)

     

     

  27.         {

     

     

  28.             base.Install(stateSaver);

     

     

  29.             //得到用户输入的参数

     

     

  30.             //参数来自于后面 第 14 步 自定义操作的参数

     

     

  31.             //自定义操作参数的属性CustomActionData:/SqlServerIP=[SQLSERVER_NAME] /DataBase=[DATABASE_NAME] /UserName=[USERNAME] /Password=[PASSWORD] /TargetDir="[TARGETDIR]/"

     

     

  32.             //中括号中的就是之前各文本框的Edit_Property值.最后一个TARGETDIR是安装路径,注意后面还有个反斜杆

     

     

  33.             string sqlServerIP = this.Context.Parameters["SqlServerIP"];

     

     

  34.             string database = this.Context.Parameters["DataBase"];

     

     

  35.             string userName = this.Context.Parameters["UserName"];

     

     

  36.             string password = this.Context.Parameters["Password"];

     

     

  37.             string targetdir = this.Context.Parameters["TargetDir"];

     

     

  38.             //这里写你要执行的代码

     

     

  39.             //组合连接字符串

     

     

  40.             string conString = String.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3};Persist Security Info=True", sqlServerIP, database, userName, password);

     

     

  41.             //更新连接字串设定值,WinUI.exe.config 要改成你设定档的名称

     

     

  42.             UpdateConConfig("ConnectionString", conString, targetdir + "WinUI.exe.config");

     

     

  43.         }

     

     

  44.  

     

  45.         /// <summary>

     

     

  46.         /// 修改设定档连接字符串的值

     

     

  47.         /// </summary>

     

     

  48.         /// <param name="conName">连接字符串名称</param>

     

     

  49.         /// <param name="conString">连接字符串</param>

     

     

  50.         /// <param name="configfilePath">设定档路径及名称</param>

     

     

  51.         public static void UpdateConConfig(string conName, string conString,string configfilePath)

     

     

  52.         {

     

     

  53.             XmlDocument xmlDoc = new XmlDocument();

     

     

  54.             //读取设定档

     

     

  55.             xmlDoc.Load(configfilePath);

     

     

  56.             //取得连接字符串的节点

     

     

  57.             XmlNode xmlNode = xmlDoc.SelectSingleNode("configuration/connectionStrings/add[@name='" + conName + "']");

     

     

  58.             //修改连接字符串

     

     

  59.             xmlNode.Attributes["connectionString"].InnerText = conString;

     

     

  60.             //保存

     

     

  61.             xmlDoc.Save(configfilePath);

     

     

  62.         }

     

     

  63.  

     

  64.         public override void Uninstall(System.Collections.IDictionary savedState)

     

     

  65.         {

     

     

  66.             base.Uninstall(savedState);

     

     

  67.         }

     

     

  68.         public override void Commit(System.Collections.IDictionary savedState)

     

     

  69.         {

     

     

  70.             base.Commit(savedState);

     

     

  71.         }

     

     

  72.         public override void Rollback(System.Collections.IDictionary savedState)

     

     

  73.         {

     

     

  74.             base.Rollback(savedState);

     

     

  75.         }

     

     

  76.     }

     

     

  77. }

 

复制代码

11.回到安装项目.打开自定义操作视图

12.在安装中添加自定义操作

13.添加刚刚第9步所建立的项目的主输出

14.修改此自定义操作的CustomActionData属性

CustomActionData:/SqlServerIP=[SQLSERVER_NAME]/DataBase=[DATABASE_NAME] /UserName=[USERNAME] /Password=[PASSWORD]/TargetDir="[TARGETDIR]/"

15.重新生成一次.再执行安装程序看看.已经OK啦!

最后看看我们的设定档内容

 

  1. <?xml version="1.0" encoding="utf-8"?>

     

     

  2. <configuration>

     

     

  3.   <connectionStrings>

     

     

  4.     <add name="ConnectionString" connectionString="Data Source=DBServer;Initial Catalog=szitrDB;User ID=szitr.com;Password=szitr.com;Persist Security Info=True" providerName="System.Data.SqlClient" />

     

     

  5.   </connectionStrings>

     

     

  6. </configuration>

你可能感兴趣的:(String,database,sqlserver,WinForm,encoding,installer)