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

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

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

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

C#安装程序制作让安装后的程序开机自动运行的更多相关文章

  1. 在Ubuntu安装Tomcat7.0及开机自动运行

    在Ubuntu安装Tomcat7.0及开机自动运行 1.安装装Tomcat7.0 一般都是绿色版的,下载一个tomcat7.0解开到指定的目录上即可 然后进入tomcat目录的bin文件夹,执行 su ...

  2. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

    1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里 --------引用---------------------- 在完成 run level 3 ...

  3. 【转】]Android实现开机自动运行程序

    有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以“Don't call me, I'll call y ...

  4. Android实现开机自动运行程序

    有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以“Don't call me, I'll call y ...

  5. C# 设置程序开机自动运行(+注册表项)

    有时候我们需要让软件安装好了,开机自动运行,这时我们需要把启动项加载到注册表中,需要注意的时现在很多杀毒软件在其他软件更改注册表的时候会有提示,可能会阻止.下面代码包含增加启动项到注册表和删除启动项. ...

  6. Android---让你的APK程序开机自动运行(转)

    转自: http://blog.sina.com.cn/s/blog_72f6e45701014l6t.html 有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service. ...

  7. ubuntu开机自动运行用Qt写的程序

    这里介绍一种在ubuntu系统开机自动运行使用Qt编写的程序的方法.首先要注意要自动运行Qt编的程序,不需要先打开Qt,而是直接运行编译好的与工程名同名的可执行文件即可,比如我要运行的工程为QRDec ...

  8. C#.NET Form设置/取消开机自动运行,判断程序是否已经设置成开机自动启动(转载)

    #region//开机自动运行        private void CB_Auto_CheckedChanged(object sender, EventArgs e)        {//CB_ ...

  9. WPF 设置程序开机自动运行(+注册表项)

    #region 设置程序开机自动运行(+注册表项) RegistryKey rgkRun = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Micr ...

随机推荐

  1. windows下修复Linux引导 and linux下几个常用软件

    在这里,我选择的是deepinLinux,不用说,高端大气上档次! Linux下引导修复 在win7上安装好了Linux,一不小心Linux系统启动不了 (一不小心的过程,想使用root登录图像界面, ...

  2. [bzoj4552][Tjoi2016][Heoi2016]排序

    Description 给出一个$1$到$n$的全排列,现在对这个全排列序列进行$m$次局部排序,排序分为$2$种: $1.(0,l,r)$表示将区间$[l,r]$的数字升序排序; $2.(1,l,r ...

  3. IE6 IE7下文字显示竖排的解决办法

    IE下文字显示竖排的解决办法: white-space:nowrap;

  4. 文件和目录之chmod和fchmod函数

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 这两个函数使我们可以更改现有文件的访问权限: ...

  5. 201521123007《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题目4-1) private static ...

  6. Objective-C ARC下IBOutlet属性是用weak还是strong来修饰

    1.苹果官方说明: From a practical perspective, in iOS and OS X outlets should be defined as declared proper ...

  7. Mysql在master上查看有哪些slave

    mysql> select * from information_schema.processlist as p where p.command = 'Binlog Dump'; 或 mysql ...

  8. Python的符号、对齐和用0填充

    # 用0填充 print("用0填充:{0:010.2f}".format(math.pi)) # 用1填充(事实上,你无法实现“用1填充”,因为即使实现了,那也是另外一个数字) ...

  9. tpcc-mysql 系列一:安装使用

    1:安装epel包: rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm 2: yum i ...

  10. java面试题--实现一个百亿的计算器

    看了网上很多说法,没有具体把它实现的,我试了一下其实还是比较简单的. 直接看代码: package com.infomorrow; import java.math.BigInteger; impor ...