zoukankan      html  css  js  c++  java
  • 【转】c# winform 打包部署 自定义界面 或设置开机启动

    方法一:

    创建安装部署这部分就不用说了,添加安装部署项目后,鼠标右键安装项目->视图->注册表, 要使软件在开机就运行,可以在HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun中添加键值保存软件目录。在这里我们依次添加以上的项,然后在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、SOFTWAREMicrosoftWindowsCurrentVersionRun下的信息,让自己的程序开机自动运行。

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

    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(@"SOFTWAREMicrosoftWindowsCurrentVersionRun",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

  • 相关阅读:
    node的安装与配置
    linux下查看是否安装某个软件
    怎么把apk文件部署在云服务器上
    github怎么搜索!!!
    node.js搭建本地服务器的两种方式(anywhere和http-server)
    js中迭代方法
    yarn和npm的区别
    总结一下测试工程师学习的博客和网站
    我的周记1——”云想衣裳花想容"
    2019/11/22 再聊职业规划——5年后,你想成为怎样的人?
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/5698857.html
Copyright © 2011-2022 走看看