**Web应用的一键发布程序**
前段时间刚到公司上班,上级给了一个任务用于试用期测试和转正述职前提。需求如下:制作一个web应用的一键发布发布程序,要求能自动检测安装IIS,应用所需插件,还原数据库(sql server)备份文件和执行更新SQL。
先说一下我的思路:
由于我们公司的客户都试用WINDOWS的系统,我们开发工具是vs2015。所以我最想到的就是利用支持VS的打包工具来实现将系统界面和我自定义界面结合来实现这个安装程序。
我最先使用的是VS开发工具建议使用的InstallShield-Limited-Edition这个打包插件。研究了一下发现这个插件的界面比较的美观也有一定的用户自定义功能,各种定制选项也比较完善;但是我发现他不能实现用户自定义界面(例如:WinForm)和工具所提供的见面组合,无法满足我的要求最后放弃了。后来改用了微软自己的打包工具visual studio installer这个工具能够实现我的所有需求。
这个工具安装完成之后VS工具里面就会出现相应的工程。
[如图](https://img-blog.csdn.net/20170725164849927?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzA2OTcwMTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
有了这个东东之后我们就可以开始接下来的操作了!!首先需要创建一个安装工程,如上图这个工具可以打包桌面应用程序,也可以打包发布WEB应用。由于我所发布的程序的特殊性(混合程序),我就选用了桌面应用程序的(Setup project)。最基础的自定义要求如图[这里写图片描述](https://img-blog.csdn.net/20170725170700378?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzA2OTcwMTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast),这个工具的使用方式你们可以参考一下这位道友的文章(http://www.cnblogs.com/daban/archive/2012/06/27/2565449.html)。自定义安装程序你需要2个最基础的工程第一个当然就是 安装打包工程(Setup project);另一个是自定义界面和处理逻辑需要使用的类库工程(创建最普通的类库工程就好)然后删除点里面的默认class.cs文件,新建一个安装类。如图[就是他](https://img-blog.csdn.net/20170725172115114?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzA2OTcwMTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)这个类就是系统的安装逻辑和你自定义的逻辑连接的中间点。在这个类里面你可以自定义安装,修复,卸载。。。。所需要使用的特殊逻辑和界面。这个类的具体使用方法我就不详细说明了,网上一大推说明。
![安装描述](https://img-blog.csdn.net/20170725172840560?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzA2OTcwMTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如图就是我在系统安装步骤结束之后打开了一个我自定义的界面,后面的步骤就是同学们最熟悉的WINFORM工程的操作了。
我列举一下比较重要的功能点代码:
1:IIS的检测以及添加网站、应用池、重启指定网站等等
using Microsoft.Web.Administration;
using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Linq;
namespace SetupLibrary
{
/// <summary>
/// IIS 操作方法集合
/// http://blog.csdn.net/ts1030746080/article/details/8741399 错误
/// </summary>
public class IISTools
{
private static string HostName = "localhost";
/// <summary>
/// 获取本地IIS版本
/// </summary>
/// <returns></returns>
public static string GetIIsVersion()
{
try
{
DirectoryEntry entry = new DirectoryEntry("IIS://" + HostName + "/W3SVC/INFO");
string version = entry.Properties["MajorIISVersionNumber"].Value.ToString();
return version;
}
catch (Exception se)
{
//说明一点:IIS5.0中没有(int)entry.Properties["MajorIISVersionNumber"].Value;属性,将抛出异常 证明版本为 5.0
return string.Empty;
}
}
/// <summary>
/// 创建虚拟目录网站
/// </summary>
///