为C#应用程序创建Visual Studio安装项目生成MSI包安装程序

来源:互联网 发布:免费php人才招聘系统 编辑:程序博客网 时间:2024/05/01 20:34

为C#应用程序创建Visual Studio安装项目生成MSI包安装程序  

介绍

微软提供了很多为Windows程序创建安装文件的方法.

在我打算创建安装文件时,不知如何下手。我在网络上找到很多文章介绍如何创建安装项目,可是行不通,有些也没有实例可以参考。

我的 QC 团队促使我写下这篇文章.

本文中我将一步步介绍创建一个Windows程序和安装文件的流程。

开始行动

首先,创建一个只有一个窗体的应用程序,包含一个文本框和一个按钮,真的很简单。

MSI1.jpg

我将程序命名为 CreatingInstaller,当然你可以命名其它名字。

创建好的窗体如下:

MSI2.jpg

写一些简单的代码,点击按钮显示文本框内容:

MSI3.jpg

主要任务

Windows程序完成了,我们为其添加一个安装项目:

MSI4.jpg

在解决方案上点击右键选择添加新项目,在弹出的创建项目窗口选择 "Other Project Types" -> "Setup and Deployment" -> "Visual Studio Installer":

MSI5.jpg

项目添加之后,在项目上点击右键,选择查看->文件系统。打开如下界面,你可以看到应用程序文件夹、用户桌面和用户程序菜单 。

MSI6.jpg

右键点击Application Folder并选择添加->项目输出;选择要创建安装文件的项目:

MSI7.jpg

选择"CreatingInstaller",即 "Add Output Project Group" 窗口选择要做安装文件的项目,将其作为主输出,然后点击 "Ok".

MSI8.jpg

添加结果如下图: 

MSI9.jpg

现在将Windows程序的功能扩展一下,点击按钮后读取一个文件,将文件内容显示出来。在 "bin\debug\Input" 添加名为Sample.txt的文件夹,其中Input文件夹是用来放txt文件的。

完成功能代码:

MSI10.jpg

运行程序。

MSI11.jpg

MSI12.jpg


在安装程序中添加文件夹和文件,以便满足程序的要求。

右键点击Application Folder,添加一个文件夹。此文件夹将创建到Application Folder,将其命名为Input。

MSI13.jpg

右键点击文件夹,在属性中,将 Always Create属性设为True. 这样在安装程序时将创建此文件夹。

MSI14.jpg


创建快捷方式

为Windows程序设置一个图标:

MSI15.jpg

右键点击 Input选择添加文件,浏览到 Sample.txt后将其添加进来.

MSI16.jpg

在 主输出上点击右键,选择 "Create Shortcut to Primary Output", 将其命名为 CreatingInstaller.

在其属性面板为Icon属性选择一个图标。此图标将创建到桌面,下图演示如何添加图标:

MSI17.jpg


MSI18.jpg


将Application Folder 中的快捷方式剪切出来,粘贴到 User's Desktop文件。这样为程序在桌面创建快捷方式的工作就完成了.

MSI19.jpg

在程序菜单创建快捷方式的流程和上面类似,如下图所示:

MSI20.jpg

创建程序文件夹 CreatingInstaller.

创建新的快捷方式

MSI21.jpg


添加图标

MSI22.jpg


右键点击 Application folder选择属性,设定安装位置:

MSI23.jpg

卸载

在程序菜单添加卸载功能,这样无需到控制面板卸载软件了. 

Step 1

右键点击File System on the target Machine 选择"Add Special Folder" -> "System Folder" :


MSI24.jpg


Step 2

右键点击创建的system folder将 msiexec.exe文件(在System.Windows32 文件夹下)添加进来..

MSI25.jpg

将此文件的属性设置为如下图所示:

MSI26.jpg


Step 4

为此文件在程序菜单创建快捷方式,命名为 "Uninstall".

MSI27.jpg

Step 5

查看setup project的属性。可以自定义如产品名称、作者、安装位置等属性。

J选择 product code。我们需要它作为msiexec的参数来实现卸载功能。

MSI28.jpg


Step 6

右键点击Uninstall 快捷方式,设置其 arguments属性如下:
/x {product code} /qr
/x的意思是卸载.
具体内容请查看 http://technet.microsoft.com/en-us/library/cc759262(v=ws.10).aspx,

MSI29.jpg

Step 7

保存并重新编译 setup project.

任务完成 !

运行生成的安装文件:

MSI30.jpg


MSI31.jpg

MSI32.jpg

MSI33.jpg


在桌面和程序菜单可看到我们创建的快捷方式

MSI34.jpg

浏览程序文件夹,可看到 Input 文件夹和 Sample.txt 文件.运行程序,结果和在VS中运行时是一样的。

MSI35.jpg

点击卸载,执行卸载操作:

MSI36.jpg

Custom Actions

Custom actions 是在安装或卸载过程中执行自定义操作。比如当程序运行时,执行了卸载,由于程序已经在内存运行,因此卸载完成,而程序还在运行。我们可以在卸载时判断程序是否在运行,如果运行可先将其关闭然后再卸载。

1. 在Windows程序中添加Installer类,其中为 Installation, Uninstallation, Rollback,Commit指定了自定义行为事件.

MSI37.jpg


我们需要为uninstallation写一些代码。
代码中的逻辑是找到正在运行的程序,将其关闭。这里不做具体解释,只是为了演示如何使用自定义行为。


 

using System;

using System.Collections;

using System.Collections.Generic;

using System.ComponentModel;

using System.Configuration.Install;

using System.Diagnostics;

using System.Linq;

 

 

namespace CreatingInstaller

{

    [RunInstaller(true)]

    public partial class Installer1 : System.Configuration.Install.Installer

    {

        public override void Install(IDictionary savedState)

        {

            base.Install(savedState);

            //Add custom code here

        }

 

 

        public override void Rollback(IDictionary savedState)

        {

            base.Rollback(savedState);

            //Add custom code here

        }

 

        public override void Commit(IDictionary savedState)

        {

            base.Commit(savedState);

            //Add custom code here

        }

 

 

        public override void Uninstall(IDictionary savedState)

        {

            Process application = null;

            foreach (var process in Process.GetProcesses())

            {

                if (!process.ProcessName.ToLower().Contains("creatinginstaller")) continue;

                application = process;

                break;

            }

 

            if (application != null && application.Responding)

            {

                application.Kill();

                base.Uninstall(savedState);

            }

        }

 

    }

}

2. 在CreatingInstallerSetup项目上选择 Custom Actions Editor.

MSI38.jpg

3. 右键点击,选择添加自定义行为,然后选择Application Folder中的主输出 

MSI39.jpg

MSI40.jpg


4. 任务完成了。

MSI41.jpg

.Net Framework

如果按照软件的电脑上没有 .Net Framework怎么办? 我们可以选择自己的包,这样程序无需依赖客户电脑的 .Net Framework。

打开安装程序的属性窗口.

点击 Prerequisites 按钮,在弹出的窗口中 选择需要的.Net Framework,然后选择第二个单选按钮,点击确定。

MSI42.jpg



浏览安装程序的Debug文件夹,多了两个子文件夹.

需要的文件都包含进来了.

MSI43.jpg




结论

此指南给出了创建安装程序的基本步骤,没有深入解释如注册表、 license agreements . 还有很多需要继续深入的,不过有了这些已经可以完成基本的任务了!

0 0
原创粉丝点击