1、创建安装项目后要在自己的解决方案是添加一个新的类库项目(ClassLibrary1),并在新类库中添加一下安装程序类(Installer1),在Installer1类中添加如下代码:
string LogicDir;//用于读取安装目标的物理路径 protected override void OnAfterInstall(IDictionary savedState) { base.OnAfterInstall(savedState); } public override void Install(IDictionary stateSaver) { //string ll=Context.Parameters[] LogicDir = Context.Parameters["LogicDir"];//Context.Parameters["LogicDir"]; base.Install(stateSaver); } protected override void OnBeforeInstall(IDictionary savedState) { base.OnBeforeInstall(savedState); } public override void Uninstall(IDictionary savedState) { base.Uninstall(savedState); } public override void Rollback(IDictionary savedState) { base.Rollback(savedState); }
2、在库类项目ClassLibrary1是添加一个window窗体form1,用于完成自定义的安装配置。
窗体界面自己设计;
如添加三个TextBox
txtServerName服务器名称
txtSQLUserName SQL用户名称
txtSQLUserPassword SQL用户口令
添加一个Button
给Form1添加字段 string filePath;
重载Form1的构造函数
public Form1(string filepath)
{ filePath = filepath; InitializeComponent(); }
Button1的单击事件代码如下:
private void btSave_Click(object sender, EventArgs e) { Configuration config = ConfigurationManager.OpenExeConfiguration(filePath + @"\MySchool.exe"); //配置MySchool.exe.config文件。
if (config.ConnectionStrings.ConnectionStrings["MySchoolConnectionString"] != null) { config.ConnectionStrings.ConnectionStrings.Remove("MySchoolConnectionString"); //="Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=123456" string connString = "Data Source=" + this.txtServerName.Text.Trim(); connString += ";Initial Catalog=MySchool;User ID=" + this.txtSQLUserName.Text.Trim(); connString += ";Password=" + this.txtSQLUserPassword.Text.Trim(); ConnectionStringSettings conn = new ConnectionStringSettings("MySchoolConnectionString" , connString, "System.Data.SqlClient"); config.ConnectionStrings.ConnectionStrings.Add(conn); config.Save(); //此处开开始添加开机自动运行的键值,注意要using Microsoft.Win32; RegistryKey hklm = Registry.LocalMachine; RegistryKey shoftwer = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true); // RegistryKey ksxt = shoftwer.CreateSubKey("ksxt"); shoftwer.SetValue("ksxt", filePath + @"\MySchool.exe"); Application.Exit(); } }
3.修改安装程序类Installer1中的OnAfterInstall方法如下:
Form1 fm1 = new Form1(LogicDir);//实例化一个窗体, fm1.ShowDialog();//让新窗体显示 base.OnAfterInstall(savedState);
4.修改安装程序类Installer1中的Install方法如下
LogicDir = Context.Parameters["LogicDir"];//读取安装目标路径 base.Install(stateSaver);
5.在安装项目中“自定义操作”
右击“安装”添加自定义操作,自定义操作来源于安装项目的“应用程序文件夹”中的“主输出来自ClassLibrary1(活动)”项。
6.修改“主输出来自ClassLibrary1(活动)”的CustomActionData属性为 /LogicDir="[TARGETDIR]\"
把Windows Installer 属性的安装目标属性[TARGETDIR]赋值给LogicDir,这样在Install方法中才能读取到安装路径。
照以上步骤生成解决方案后,即可发布自己的程序。
用以上思路也可以实现卸载输入合法口令卸载的功能。
注意:参数中的安装路径会出现 \\ 两个反斜线!
|
请发表评论