zoukankan      html  css  js  c++  java
  • VS2010中创建安装项目

    这里简单介绍如何在VS2010开发环境下制作安装项目,其中包括如何设置开机启动、删除注册表及安装后自动运行,加上卸载功能。

    1、  创建安装项目

        打开VS2010,点击菜单上的“文件”>>“新建”>>“项目”,弹出如下对话框。

    如上图所示,在“其他项目类型”中选择“安装项目”,根据自己的需求命名,这里命名为“MySetup”,选择保存路径。这样就创建了一个安装项目。

    2、 

    在安装项目中添加其他应用程序项目
    点击菜单上的“文件”>>“添加”>>“现有项目”,弹出如下对话框。

    这里选择之前已经做好的一个WPF应用程序项目

    3、 将WPF的可执行文件(.exe)、类库(.dll文件)及所需图片加入安装项目中
    右击“MySetup”>>“视图”>>“文件系统”,主窗口显示文件系统界面,如下图

    右击“应用程序文件夹”>>“添加”>>“项目输出”,弹出如下对话框。

    在“项目”选项中选择“DataServiceHost”,按住“Ctrl”键,选中“主输出”和“内容文件”,单击“确定”。
    再右击“应用程序文件夹”>>“添加”>>“文件夹”,命名为“Images”,在“Images”中放入应用程序需要的图片,右击“Images”>>“添加”>>“文件”,在弹出的对话框中添加所需的图片。

    4、 

    创建快捷方式
    在“应用程序文件夹”中右击“主输出来自DataServiceHost(活动)”,如下图。

    点击“创建 主输出来自DataServiceHost(活动)的快捷方式”,将快捷方式重命名为“我的WPF应用程序”,这里可以根据需要命名。
    在“文件系统”中的“用户的“程序”菜单”添加文件夹“我的WPF应用程序”,这里可以根据需求命名,将之前“我的WPF应用程序快捷方式”剪切到该文件夹中。
    同理可以在“文件系统”中的“用户桌面”中创建快捷方式。(在用户桌面中不要添加文件夹)

    5、 

    实现安装程序卸载
    这里直接引用了Windows系统中自带的一个卸载程序,该卸载程序在“C:/Windows/System32”文件夹中,名称为 “msiexec.exe”,右击“应用程序文件夹”>>“添加”>>“文件”,将“msiexec.exe”加入“应用程序文 件夹”中

    同步骤4,创建卸载程序的快捷方式,这里建议不要在“用户桌面”中创建卸载程序,难看!!!
    重点,“卸载快捷方式”的属性“Argument”值设为“/x{710AD120-3D4C-430D-A9FA-A1D504465CC8}”,其中 “{710AD120-3D4C-430D-A9FA-A1D504465CC8}”可在“MySetup”属性框口中找到。左击“MySetup”(不 是右击),再点击属性窗口,如下图。

    “ProductName”属性值就是上述的“{710AD120-3D4C-430D-A9FA-A1D504465CC8}”。

    6、 

    改变各快捷方式的图标
    这里只拿“我的WPF应用程序快捷方式”为例,其他同理。
    在“应用程序文件夹”中的“Images”中添加需要的“.ico图标”,这里添加一个“mywpf.ico”图标。如下图。

    右击“我的WPF应用程序快捷方式”>>“属性窗口”,属性窗口如下图。

    设置“Icon”属性,选择“Images”中的“mywpf.ico”图标。

    7、 

    实现开机启动
    右击“MySetup”>>“视图”>>“注册表”,主窗口显示如下图。

    在 “HKEY_LOCAL-MACHINE”文件夹下新建键 “Software”>>“Microsoft”>>“Windows”>>“CurrentVersion”>>“Run”, 在“Run”文件夹新建字符串值,命名为“DataServiceHost.exe”,可根据需求命名,右击 “DataServiceHost”>>“属性窗口”,其中“Value”属性设为“[TARGETDIR] DataServiceHost.exe”。如此,便实现了开机启动。

    8、 

    实现安装后自动运行及删除注册表
    实现这两个功能就需要一些技巧,点击菜单上的“文件”>>“添加”>>“新项目”,如下图。

    在 “HKEY_LOCAL-MACHINE”文件夹下新建键 “Software”>>“Microsoft”>>“Windows”>>“CurrentVersion”>>“Run”, 在“Run”文件夹新建字符串值,命名为“DataServiceHost.exe”,可根据需求命名,右击 “DataServiceHost”>>“属性窗口”,其中“Value”属性设为“[TARGETDIR] DataServiceHost.exe”。如此,便实现了开机启动。

    9、 

    实现安装后自动运行及删除注册表
    实现这两个功能就需要一些技巧,点击菜单上的“文件”>>“添加”>>“新项目”,如下图。

    选择“安装程序类”,命名为“Installer”。
    在“Installer.cs”代码中重写如下方法:
    /// <summary>
     

           /// 函数入口——主函数
            /// </summary>
            public static void Main()
            {

            }

            public Installer1()
            {
                InitializeComponent();
            }

            /// <summary>
            /// 重写安装完成后函数
            /// 实现安装完成后自动启动已安装的程序
            /// </summary>
            /// <param name="savedState"></param>
            protected override void OnAfterInstall(IDictionary savedState)
            {
                base.OnAfterInstall(savedState);
            }

            /// <summary>
            /// 重写安装过程方法
            ///
            /// </summary>
            /// <param name="stateSaver"></param>
            public override void Install(IDictionary stateSaver)
            {
                base.Install(stateSaver);
            }

            protected override void OnBeforeInstall(IDictionary savedState)
            {
                base.OnBeforeInstall(savedState);
            }

            /// <summary>
            /// 重写卸载方法
            /// </summary>
            /// <param name="savedState"></param>
            public override void Uninstall(IDictionary savedState)
            {
                base.Uninstall(savedState);

            }

            /// <summary>
            /// 重写卸载完成后函数
            /// 实现安装完成后自动删除注册表
            /// </summary>
            /// <param name="savedState"></param>
            protected override void OnAfterUninstall(IDictionary savedState)
            {
                base.OnAfterUninstall(savedState);
            }

            /// <summary>
            /// 重写回滚方法
            /// </summary>
            /// <param name="savedState"></param>
            public override void Rollback(IDictionary savedState)
            {
                base.Rollback(savedState);
            }
    这里对protected override void OnAfterInstall(IDictionary savedState){}和protected override void OnAfterUninstall(IDictionary savedState){}进行如下自定义操作(当然也可以对其它方法进行自定义以实现其它功能)。
    protected override void OnAfterInstall(IDictionary savedState)
            {
                base.OnAfterInstall(savedState);
                Assembly asm = Assembly.GetExecutingAssembly();
                string path = asm.Location.Remove(asm.Location.LastIndexOf("\\")) + "\\";
                try
                {
                    System.Diagnostics.Process.Start(path + "\\DataServiceHost.exe");
                }
                catch (Exception my)
                {
                    throw new Exception(my.Message);
                }
            }

    protected override void OnAfterUninstall(IDictionary savedState)
     

           {
                base.OnAfterUninstall(savedState);
                RegistryKey hklm = Registry.LocalMachine;
                RegistryKey run = hklm.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
                try
                {
                    run.DeleteValue("DataServiceHost.exe");
                    run.Close();
                    hklm.Close();
                }
                catch (Exception my)
                {
                    throw new Exception(my.Message);
                }
            }
    自定义操作完成后,一定要将应用程序生成,这样就可以得到“.dll”文件。
    生成成功后,就可以将该“.dll”程序集添加到安装项目中。右击“MySetup”>>“视图”>>“自定义操作”,主窗口如下图。

    右击“安装”>>“添加自定义操作”,弹出如下对话框。

    在“应用程序文件夹”中添加程序集,在之前“InstallService应用程序”中debug文件夹中找到“.dll”文件,添加进去。这样便实现了安装后自动运行和卸载后删除注册表的功能。 9、 

    最后一步
    右击“MySetup”>>“生成”,成啦!!!在安装项目中Debug文件夹中找到“Setup.msi”,双击就可以安装了….

  • 相关阅读:
    【NYOJ】[57]6174问题
    【NYOJ】[56]阶乘因式分解(一)
    【NYOJ】[56]阶乘因式分解(一)
    【看书】for,(do-)while的循环体执行
    【看书】for,(do-)while的循环体执行
    【NYOJ】[41]三个数从小到大排序
    【NYOJ】[41]三个数从小到大排序
    EndNote X7大客户版破解版
    [TomTom]安卓汉化版v1.3,中国及海外地图懒人包
    [TomTom]安卓汉化版v1.3,中国及海外地图懒人包
  • 原文地址:https://www.cnblogs.com/qq415078405/p/2918429.html
Copyright © 2011-2022 走看看