用VS2005打包,如何让主程序在安装完成后自动启动

时间:2022-04-11 11:36:09
用VS2005打包,如何让主程序在安装完成后自动启动

29 个解决方案

#1


刚刚注册,这是仅有的 40分。哈。。。

#2


添加一个新项目,项目类型为类库,然后在这个项目中添加一个安装程序类.
添加类似下面的代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;

namespace CustomSetup
{
    [RunInstaller(true)]
    public partial class Installer1 : Installer
    {
        public Installer1()
        {
            InitializeComponent();
        }

        public override void Commit(System.Collections.IDictionary savedState)
        {
            base.Commit(savedState);
            //添加自定义操作代码
        }

(找来的。)

#3


为了那红色的40分

#4


自动启动需要添加服务吧?我记得是需要添加个服务的 写注册表啥的

#5


打包程序设置里有安装完执行的设置 弄个脚本啥的就OK了

#6


楼上的兄弟们,能说清楚一点吗?

#7


引用 2 楼 wulinshe 的回复:
添加一个新项目,项目类型为类库,然后在这个项目中添加一个安装程序类.
添加类似下面的代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;

namespace CustomSetup
{
  [RunInstaller(true……


Commit
这个方法在哪里调用;


#8


  public class OnAfteredInstall : Installer
    {
        public OnAfteredInstall()
        {

        }

        protected override void OnAfterInstall(System.Collections.IDictionary savedState)
        {
            base.OnAfterInstall(savedState);
            string path = this.Context.Parameters["targetdir"] + "my.exe";
            System.Diagnostics.Process.Start(path);
            
        }

    }

OnAfterInstall 这个方法我重写了一下,但在安装布署中,不知怎么调用 OnAfterInstall 这个方法。

#9


该回复于2011-01-26 17:02:47被版主删除

#10


额。。。慢了一步,结果已经出来了。。。

#11


http://topic.csdn.net/t/20061030/16/5119722.html

刚刚看到别人以前提的类似问题,好像还没有解决???

在线的朋友,请帮忙解决吧!!!

#12


VS2005(c#) 怎么做打包程序能使程序在安装结束后,自动执行程序

路过的朋友,请帮忙!

#13


该回复于2011-01-27 11:23:08被版主删除

#14


看来都回家过年了,哈。

#15


vs2005打包安装的时候在用户界面启动添加添加用户界面复选框,设置value为“是否开机启动”id"isstart"
创建类库
添加引用System.Configuration.Install;
类继承 Installer
重写Install方法

 [RunInstaller(true)]
    public class Class1 : Installer
    {
        private string s = "";
        private string isRun = "";
        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);
           
            s = Context.Parameters["targetDir"].Trim();
            isRun = Context.Parameters["key"].Trim();

            //安装完成执行
            base.Committed += aa(stateSaver);
        }
        public System.Configuration.Install.InstallEventHandler aa(IDictionary aa)
        {
            string[] arr = isRun.Split('_');
            if (arr.Length == 3)
            {
                if (arr[0] == "1")
                {
                    //安装完运行
                    Process.Start(s + "//软件名称.exe");
                }
                if (arr[1] == "1")
                { 
                    //开机启动
                    RegistryKey   hklm=Registry.LocalMachine; 
                    RegistryKey   run=hklm.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"); 
                    try 
                    {
                        run.SetValue("软件名称.exe", s + "//软件名称.exe"); 
                    hklm.Close(); 
                    // button1_Click(this.button2,null); 
                    } 
                    catch(Exception   my) 
                    { 
       
                    }
                }
                if (arr[2] == "1")
                {
                    //打开使用手册
                    Process.Start(s + "//ytyt.doc");
                }
                //if (arr[3] == "1")
                //{

                //    //添加到快速启动
                //}
            }
           
            return null;
        }

}

}



生成类库添加到安装文件切,换视图到自定义操作

右击安装添加文件,选择刚生成的dll文件

设置dll的属性customactiondata为/key="[第一个复选框id]_[第二个复选框]_[第三个复选框]" /targetDir="[TARGETDIR]\"

targetDir取值安装根目录
引用自百度

#16


在设置为主输出的快捷方式就行了

#17


恩,过年回家了,哈哈。没做过打包学习下

#18


需要重新做个windows服务程序,检测到这个服务程序,然后就自动启动。

#19


to: tanliang9999

好像还实现不了,

#20


引用 18 楼 gefangliang 的回复:
需要重新做个windows服务程序,检测到这个服务程序,然后就自动启动。


在主程序之前,还要开发一个服务端的程序吗?

#21


安装之后,将快捷方式拖动到“开始”菜单中的“启动”项下,就OK了

#22


引用 21 楼 lxdlut 的回复:
安装之后,将快捷方式拖动到“开始”菜单中的“启动”项下,就OK了


客户要求这么做。

#23


该回复于2011-01-28 10:24:10被版主删除

#24


正好我新作的WINFROM也要出来了,帮你就是帮自己。。

#25


引用 24 楼 ca3355 的回复:
正好我新作的WINFROM也要出来了,帮你就是帮自己。。


谢。

#26


这个问题已提出 天了,怎么还得不到 个完善的答案呀,

#27


该回复于2011-01-28 10:46:50被版主删除

#28


使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件。具体实现如下:

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

#29


上面的我都操作完毕,以实现。
“重启电脑系统就会自动运行我们设置的软件。”

就这句话我还有点问题,  请问下不重启电脑系统,像QQ安装好不需要重启电脑系统。

#1


刚刚注册,这是仅有的 40分。哈。。。

#2


添加一个新项目,项目类型为类库,然后在这个项目中添加一个安装程序类.
添加类似下面的代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;

namespace CustomSetup
{
    [RunInstaller(true)]
    public partial class Installer1 : Installer
    {
        public Installer1()
        {
            InitializeComponent();
        }

        public override void Commit(System.Collections.IDictionary savedState)
        {
            base.Commit(savedState);
            //添加自定义操作代码
        }

(找来的。)

#3


为了那红色的40分

#4


自动启动需要添加服务吧?我记得是需要添加个服务的 写注册表啥的

#5


打包程序设置里有安装完执行的设置 弄个脚本啥的就OK了

#6


楼上的兄弟们,能说清楚一点吗?

#7


引用 2 楼 wulinshe 的回复:
添加一个新项目,项目类型为类库,然后在这个项目中添加一个安装程序类.
添加类似下面的代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;

namespace CustomSetup
{
  [RunInstaller(true……


Commit
这个方法在哪里调用;


#8


  public class OnAfteredInstall : Installer
    {
        public OnAfteredInstall()
        {

        }

        protected override void OnAfterInstall(System.Collections.IDictionary savedState)
        {
            base.OnAfterInstall(savedState);
            string path = this.Context.Parameters["targetdir"] + "my.exe";
            System.Diagnostics.Process.Start(path);
            
        }

    }

OnAfterInstall 这个方法我重写了一下,但在安装布署中,不知怎么调用 OnAfterInstall 这个方法。

#9


该回复于2011-01-26 17:02:47被版主删除

#10


额。。。慢了一步,结果已经出来了。。。

#11


http://topic.csdn.net/t/20061030/16/5119722.html

刚刚看到别人以前提的类似问题,好像还没有解决???

在线的朋友,请帮忙解决吧!!!

#12


VS2005(c#) 怎么做打包程序能使程序在安装结束后,自动执行程序

路过的朋友,请帮忙!

#13


该回复于2011-01-27 11:23:08被版主删除

#14


看来都回家过年了,哈。

#15


vs2005打包安装的时候在用户界面启动添加添加用户界面复选框,设置value为“是否开机启动”id"isstart"
创建类库
添加引用System.Configuration.Install;
类继承 Installer
重写Install方法

 [RunInstaller(true)]
    public class Class1 : Installer
    {
        private string s = "";
        private string isRun = "";
        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);
           
            s = Context.Parameters["targetDir"].Trim();
            isRun = Context.Parameters["key"].Trim();

            //安装完成执行
            base.Committed += aa(stateSaver);
        }
        public System.Configuration.Install.InstallEventHandler aa(IDictionary aa)
        {
            string[] arr = isRun.Split('_');
            if (arr.Length == 3)
            {
                if (arr[0] == "1")
                {
                    //安装完运行
                    Process.Start(s + "//软件名称.exe");
                }
                if (arr[1] == "1")
                { 
                    //开机启动
                    RegistryKey   hklm=Registry.LocalMachine; 
                    RegistryKey   run=hklm.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"); 
                    try 
                    {
                        run.SetValue("软件名称.exe", s + "//软件名称.exe"); 
                    hklm.Close(); 
                    // button1_Click(this.button2,null); 
                    } 
                    catch(Exception   my) 
                    { 
       
                    }
                }
                if (arr[2] == "1")
                {
                    //打开使用手册
                    Process.Start(s + "//ytyt.doc");
                }
                //if (arr[3] == "1")
                //{

                //    //添加到快速启动
                //}
            }
           
            return null;
        }

}

}



生成类库添加到安装文件切,换视图到自定义操作

右击安装添加文件,选择刚生成的dll文件

设置dll的属性customactiondata为/key="[第一个复选框id]_[第二个复选框]_[第三个复选框]" /targetDir="[TARGETDIR]\"

targetDir取值安装根目录
引用自百度

#16


在设置为主输出的快捷方式就行了

#17


恩,过年回家了,哈哈。没做过打包学习下

#18


需要重新做个windows服务程序,检测到这个服务程序,然后就自动启动。

#19


to: tanliang9999

好像还实现不了,

#20


引用 18 楼 gefangliang 的回复:
需要重新做个windows服务程序,检测到这个服务程序,然后就自动启动。


在主程序之前,还要开发一个服务端的程序吗?

#21


安装之后,将快捷方式拖动到“开始”菜单中的“启动”项下,就OK了

#22


引用 21 楼 lxdlut 的回复:
安装之后,将快捷方式拖动到“开始”菜单中的“启动”项下,就OK了


客户要求这么做。

#23


该回复于2011-01-28 10:24:10被版主删除

#24


正好我新作的WINFROM也要出来了,帮你就是帮自己。。

#25


引用 24 楼 ca3355 的回复:
正好我新作的WINFROM也要出来了,帮你就是帮自己。。


谢。

#26


这个问题已提出 天了,怎么还得不到 个完善的答案呀,

#27


该回复于2011-01-28 10:46:50被版主删除

#28


使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件。具体实现如下:

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

#29


上面的我都操作完毕,以实现。
“重启电脑系统就会自动运行我们设置的软件。”

就这句话我还有点问题,  请问下不重启电脑系统,像QQ安装好不需要重启电脑系统。