• CSharp制作MSI安装文件


    前言:MSI文件和EXE文件区别

    在Windows上安装软件的时候,一般有两种方式:

    Windows安装包(.msi)
    Windows二进制文件(.exe)
    这两种安装方式的区别如下:

    .exe是一个安装引导程序。它是安装工程通过MSBuild创建的,其中包含了一个XML文件,定义了应用程序所需要的系统必备安装包信息。Setup.exe程序会检查这些系统必备安装包是否需要被下载和安装,如果需要,它就会先安装那些系统必备程序。当我们运行它的时候,它会读取setup.ini来确定安装所需要的配置并开始安装流程。


    .msi是一个Windows安装包。和.exe不一样,直接运行MSI安装包不会自动安装自定义系统必备。它只会安装主应用程序。当我们“运行”它的时候,其实是Windows Installer在执行MSI包定义的各项操作。因此我们需要安装Windows Installer的正确版本(也就是需要先安装程序运行起来的必备环境)才能运行.msi。
    另外,

    .msi是微软的自解压文件,如安装某些软件时就是这种文件格式打包而成的,Windows系统中自带有软件将其解压。正如WINRAR可以将文件压缩成.rar文件,也可以将.rar文件解压一样;
    而.exe是可执行文件类型,通俗一点来说.exe文件是不依靠其他软件而单独运行的文件(当然不能脱离系统),因为.exe就是软件。
    最后,
    msi是Windows installer开发出来的程序安装文件,是Windows installer的数据包,把所有和安装文件相关的内容封装在一个包里了。
    .exe也允许你安装程序,但程序员在开发.exe的时候要比开发.msi困难的多,需要人工编写和安装,修改,卸载相关的很多内容。而msi把这写功能都集成化了,易于开发Windows程序安装包。

    VS程序项目右键“发布”的就是.exe文件

    VS使用插件制作的打包文件就是.msi文件

    上一篇博文讲到如何制作.exe文件,今天主要讲.msi文件的制作,打包,签名流程

    制作过程:

    1. 打开我们写好的程序(还是拿昨天的简易计算器制作)
    2. 在制作之前,我们先给我们的程序加上图标
    3. 在主项目底下添加一个文件夹用于存放我们的程序安装Logo和程序运行界面Logo

      添加程序启动的界面Logo-jisuanqi.ico和程序发布Logo-Logo.ico。如图

       

    4. 给界面加图标
    5. 运行程序查看是否添加成功

       如图所示表示添加成功。接下来我们就可以开始制作打包程序

    6. 右键项目的解决方案,新建windows程序安装项目FormPackageSetup


    7. 新建完会出现如下截图界面

      英文的就是如下所示

       

    8. 文件说明
      应用程序文件夹:表示要安装的应用程序需要添加的文件
      用户的“程序”菜单:表示应用程序安装完,用户的"开始菜单"中的显示的内容,一般在这个文件夹中,需要再创建一个文件用来存放:应用程序.exe和卸载程序.exe
      用户桌面:表示这个应用程序安装完,用户的桌面上的创建的.exe快捷方式

    9. 添加程序文件(应用程序文件夹)

      在应用程序文件夹,点击右键添加文件:添加要打包的文件(添加的文件一般是已经编译过应用程序的debug目录下的文件) (也可以直接如下一步操作一样直接项目输出)

      如果debug下面有子文件则需要"添加文件夹",例如Image,然后将对应子文件里的内容添加到此文件夹中,方便给程序添加快捷方式图标;

    10. 选择应用程序文件夹(Application Folder)----右键----Add----项目输出,添加自己的项目即可,如下图:

       

       直接点击“确定”即可自动添加相应文件




    11. 添加卸载程序。即在添加你的应用程序项目的时候,多添加一个msiexec.exe进去,这个文件在c:\windows\system32文件夹下

       

       添加后如图所示

    12. 为程序创建快捷方式(添加用户的程序菜单)
      选中主输出FormInstallPackageDemo(活动)  ----右键----“create shortcut to 主输出FormInstallPackageDemo(活动)” 和右键卸载程序创建卸载快捷方式。 创建出来的快捷方式是可以修改的,然后把这个拖放到用户桌面【User's Desktop】,再重复一遍这个步骤,拖放到用户的程序菜单【User's Program Menu】中

       

    13. 为用户桌面创建快捷方式(这里不需要卸载的快捷方式)

    14. 创建用户的“程序”菜单快捷方式
      前面把创建的快捷付方式拖放到用户桌面了,这里就还需要创建一个程序快捷方式,同卸载快捷方式一起放到用户的“程序”菜单文件夹中(也可以在用户的程序菜单里新建一个文件夹,将快捷方式统一放到这里,方便管理)

    15. 创建完后三个文件夹及里面内容如图所示



       

    16. 为桌面快捷方式创建图标

       用户菜单界面及卸载的快捷方式设置一样

    17. 设置卸载属性
      鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:不是右击的属性

      将code复制到卸载快捷方式的Argument属性时,需要在code前面加【/x 】,x后面有空格,x不分大小写,即在Aguements属性中输入"/x {ProductCode}"

    18. 加入.NET系统组件
      鼠标右键项目,点击属性加入组件

       

    19. 设置系统必备

       点击确定后,在属性页点击应用,确定关闭属性窗口

    20. 点击项目,选择"生成"即可在我们刚才设置的目录下生成带有卸载功能的安装程序了

      生成后如图所示

    21. 完成以上步骤,生成下即可得到msi安装文件
    22. 上面只是图解了VS2010项目的主要步骤,如果需要更改图标,路径,加入公司名等等一些操作,都可以在部署项目的相应属性中设置

    23. 安装,验证程序
      msi文件和exe文件都可以运行安装,安装后,如图所示
      桌面上有快捷方式

      用户菜单界面图示

      双击运行程序

       卸载程序

      至此msi安装文件打包完成。

    24. 如果只是生成了msi文件,用户安装的时候比较麻烦,像安装一般软件一样,需要用户慢慢点击下一步,慢慢安装,在本项目中采用打包成cab文件的方式,做到用户点击运行后,即可自动安装。

    25. 打包为cab
      在这里需要准备文件有:可以在桌面上新建一个文件夹存放这四个文件
          cabarc.exe:微软提供的cab打包工具
          FormPackageSetup.msi:  本案例中FormPackageSetup项目生成的windows部署安装文件
          install.inf : 需要跟FormPackageSetup.msi打包在一起的文件,制作方法请见下文
          build.bat:  打包的批处理命令,制作方法请见下文
    26.  install.inf制作。新建txt文件,加入以下内容,将文件名重新命名为install.inf即可。其中FormPackageSetup.msi即是要打包的安装程序的名称。
      [version]  
      signature="$CHICAGO$"  
      AdvancedINF=2.0  
      
      [Setup Hooks]  
      hook1=hook1  
      
      [hook1]  
      run=msiexec.exe /i "%EXTRACT_DIR%\FormPackageSetup.msi" /qn
    27. build.bat制作。新建txt文件,加入以下内容,将文件名重新命名build.bat即可。其中FormPackageSetupCab.cab是生成目标cab的名称;install.inf是第一步生成的文件名,而FormPackageSetup.msi是需要打包的安装程序名;第二条ping命令仅仅是让批处理不要那么快退出,起到更利于观察生成结果的作用
      "cabarc.exe" -s 6144 n FormPackageSetupCab.cab install.inf FormPackageSetup.msi
      ping -n 20 127.0.0.1 >nul 
    28. 双击build.bat批处理命令即可生成cab文件

       

       双击bat后的运行结果如下,其中FormPackageSetupCab.cab即是生成的目标cab文件。

    29. 待更新...
  • 相关阅读:
    控件显示和隐藏
    删除标题和边框
    界面图片
    VC界面最前端显示
    在VC++6.0开发中实现全屏显示
    VC比例放大缩小
    plsql dev
    通过OCCI连接oracle(C++)
    VC++使用Pro*CC++
    文件对话框
  • 原文地址:https://www.cnblogs.com/wuhanjackh/p/16297729.html
Copyright © 2020-2023  润新知