博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#安装程序制作让安装后的程序开机自动运行
阅读量:6135 次
发布时间:2019-06-21

本文共 2702 字,大约阅读时间需要 9 分钟。

 

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方法中才能读取到安装路径。

照以上步骤生成解决方案后,即可发布自己的程序。

用以上思路也可以实现卸载输入合法口令卸载的功能。

 

注意:参数中的安装路径会出现 \\  两个反斜线!

 

转载地址:http://kieua.baihongyu.com/

你可能感兴趣的文章
学习笔记之Data Visualization
查看>>
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
【FJOI2015】金币换位问题
查看>>
数学之美系列二十 -- 自然语言处理的教父 马库斯
查看>>
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>
Chrome浏览器播放HTML5音频没声音的解决方案
查看>>
easyui datagrid 行编辑功能
查看>>
HDU 2818 (矢量并查集)
查看>>
实验二 Java面向对象程序设计
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
416. Partition Equal Subset Sum
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>