方法一:

创建安装部署这部分就不用说了,添加安装部署项目后,鼠标右键安装项目->视图->注册表, 要使软件在开机就运行,可以在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中添加键值保存软件目录。在这里我们依次添加以上的项,然后在Run中添加键值,键名可以自己起,value要填软件的物理路径。物理路径是客户在部署确定的,我们如何获取呢?这里我们可以使用[TARGETDIR]获取客户选择的路径,在加上软件的启动文件名称。比如软件启动文件的名称是Client.exe,那么Value的值就为:[TARGETDIR]Client.exe.生成安装项目。找到bin目录下的setup.exe文件运行,安装结束后我们可以在注册表中找到相应的键值。重启电脑系统就会自动运行我们设置的软件。

引自:http://www.cnblogs.com/whj518/archive/2009/10/28/1591026.html

我用的是方法1,可以成功(一开始以为得在local_machine下面的run才可以,现在发现在current_user下面的run也可以)

我发现一个很奇怪的现象,就是假如我在安装包中是通过在local_machine下面的run所添加程序路径进来,然后安装后用系统的注册表编辑器来看,会找不到自己所添加的,但是如果重启一下却又的确可以自动启动我的程序,真是奇怪,就好像本来添加成功了的注册表启动项用注册表编辑器看不到了

在安装包制作中,是有添加一项到run里面的,但是用注册表编辑器却看不到,不过开机启动依然可以自行启动我的程序。。。

方法二:

CSDN中使用VS制作安装程序的介绍很多,我这里主要是在开发winform是制作安装程序后,如何修改.config配置文件,并修改注册表HKEY_LOCAL_MACHINE、SOFTWARE\Microsoft\Windows\CurrentVersion\Run下的信息,让自己的程序开机自动运行。

解决以上两个问题关键要作到以下几点:

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://blog.163.com/zjlovety@126/blog/static/2241862420106251532268/

from:http://blog.csdn.net/findsafety/article/details/46008929

【转】c# winform 打包部署 自定义界面 或设置开机启动相关推荐

  1. MySQL【环境搭建 02】Linux 非 root 用户部署 mysql-5.7.28 设置开机启动及问题汇总(含云盘资源)

    之前分享了<Linux环境root用户安装 mysql-5.7.28>,很多时候我们部署的应用或者数据库的服务器是客户方的,我们可能没有root权限,所有这里分享一下非root权限如何安装 ...

  2. 两个小知识:C#如何设置开机启动时自动执行程序|C# WinForm打开超链接

    通过在Microsft.Win32命名空间的Registry可以在注册表中设置注册表项中的名称/值对的值. 在注册表的"HKEY_CURRENT_USER\Software\Microsof ...

  3. C# winform设置开机启动

    C# winform设置开机启动 命名空间 using Microsoft.Win32; 代码 注意this.uiCheckBox1.Checked时针对Winfom程序的,如果是命令行程序要另外设置 ...

  4. windows设置开机启动项

    一.windows下设置开机启动有如下方法 1 注册表启动项目RUN 2 计划任务,在"windows管理">"计划任务管理器"中新建任务,在操作栏指定要 ...

  5. tomcat安装并设置开机启动

    tomcat安装并设置开机启动 服务器系统CentOS 6.6 tomcat服务器:172.30.65.176 tomcat部署 1).先删除机器本身自带的jdk [root@localhosthua ...

  6. Windows 10和Linux脚本启动jar包服务器,并设置开机启动

    Windows 10和Linux脚本启动jar包服务器,并设置开机启动 现在好多Java服务和应用都是用jar启动,jar打包成的里面会直接带有tomcat,所以可以直接启动,但是如何通过脚本启动并且 ...

  7. win7运行python脚本_windows7设置开机启动项自动启python脚本

    windows7设置开机启动项自动启python脚本 windows7左下角搜索框输入shell:startup 会出现一个文件夹,开机的时候windows7会自动打开里面的文件 1.可以把pytho ...

  8. ubuntu 设置开机执行脚本_ubuntu-18.04 设置开机启动脚本

    ubuntu-18.04 设置开机启动脚本 参阅下列链接 ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.local重新发 ...

  9. Linux设置开机启动

    Linux设置开机启动有几种方式,今天就来讨论以下几种方式. 方法一:编辑rc.loacl脚本 直接在/etc/rc.local中添加启动脚本. $ vim /etc/rc.local 方法二:Lin ...

最新文章

  1. Xcode升级到8之后的一些需要我们手动配置的地方
  2. 基于比特币现金BCH二层网络能实现区块链2.0以太坊的智能化吗
  3. 若有说明:int *p1,*p2,m=5,n;以下均是正确赋值语句的选项是( )?
  4. angular模块库开发实例
  5. Java 洛谷 P1426 小鱼会有危险吗
  6. IOT(Index Organized Table)
  7. 2017职称英语和计算机考试,2017年职称英语考试取消了吗
  8. 快速入门Web前端开发的正确姿势
  9. 网管系统开发经验谈(二)
  10. linux查看网卡吞吐量和网卡流量用自带命令,iptraf查看。
  11. 2021-09-28 网安实验-取证分析-Stuxnet病毒
  12. Netapp存储搬迁
  13. 晨魅--高拍仪二次开发
  14. 深度测评:学习商业数据分析,贪心科技AI到底靠谱么?
  15. 文件内容批量简体转换繁体
  16. J2EE进阶之自定义标签,JSTL标签,国际化 十四
  17. Linux系统变慢原因?
  18. 订单管理_02修改订单信息流程
  19. 积雪草酸肌白蛋白纳米粒|野黄芩苷豆清白蛋白纳米粒|黄芩苷蓖麻蛋白纳米粒(齐岳)
  20. mac os sierra卸载java_如何删除Install macOS High Sierra.app

热门文章

  1. Activity启动过程剖析
  2. Flutter开发之布局-4-container(18)
  3. 如何在安装程序中判断操作系统是否是64位 inno
  4. 基因组表达分析:如何选择RNA-seq vs. 芯片
  5. Spring Quartz
  6. CodeChef CBAL
  7. IOS8开发之实现App消息推送
  8. __GLOBAL__I_a in libUPPayPlugin.a(UPPasswordTool.o)
  9. 解决Git Revert操作后再次Merge代码被冲掉的问题
  10. C#正则表达式引发的CPU跑高问题以及解决方法