如何用VS制作Web安装程序.docx

上传人:b****2 文档编号:23304555 上传时间:2023-05-16 格式:DOCX 页数:29 大小:525.66KB
下载 相关 举报
如何用VS制作Web安装程序.docx_第1页
第1页 / 共29页
如何用VS制作Web安装程序.docx_第2页
第2页 / 共29页
如何用VS制作Web安装程序.docx_第3页
第3页 / 共29页
如何用VS制作Web安装程序.docx_第4页
第4页 / 共29页
如何用VS制作Web安装程序.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

如何用VS制作Web安装程序.docx

《如何用VS制作Web安装程序.docx》由会员分享,可在线阅读,更多相关《如何用VS制作Web安装程序.docx(29页珍藏版)》请在冰豆网上搜索。

如何用VS制作Web安装程序.docx

如何用VS制作Web安装程序

如何用VS2005制作Web安装程序

网站完成后,需要部署到目标机器上,方法有很多,直接把文件Copy到目标机器上,执行SQL脚本,配置IIS,这样可以做到;也可以使用InstallShield这样到专业制作软件来打包。

本篇文章是使用VS2005自带到安装部署工具来制作exe安装文件。

 

涉及到到内容包括:

使用安装部署工具,建立数据库,配置IIS,文件操作,注册表等。

参考了网上关于使用VS制作安装程序的文章。

环境:

Windows2003+VS2005+SQL2005。

注:

本文只是为了实现,没有强调方法,变量等的写法标准。

 

使用VS2005制作安装程序的时候,有多种选择,如下图:

我想一般常用的可能就最上面的两种。

当使用Web安装项目时,执行制作好的msi安装文件时,会发现实际上是添加虚拟目录而不是添加网站,而且无法选择安装目录,当然,可以自己写脚本来对IIS进行修改。

不过在这篇文章里,将不采用此模式。

本篇文章用的是使用“安装项目”,就和打包WinForm程序一样,把Web文件部署到目标机器上,然后重写install方法,配置IIS,执行SQL脚本,修改web.config文件等。

 

在开始整个过程之前,需要先了解一下“预编译”的概念,MSDN上的说明是:

默认情况下,在用户首次请求资源(如网站的一个页)时,将动态编译ASP.NET网页和代码文件。

第一次编译页和代码文件之后,会缓存编译后的资源,这样将大大提高随后对同一页提出的请求的效率。

请查阅MSDN“预编译”相关文档。

 

准备一个文件DBSQL.txt,在里面包含连接数据库后需要执行的SQL脚本,在本例中使用了简单的一个CreateTabel的SQL。

 

好了,现在开干,吼吼~~~~~~~~~~

 

打开VS2005,打开一个网站项目,这里是打开的本地localhost,如图:

新加一个页面,随便取个名字(本文中为ClientCallback.aspx),然后写一个简单的按钮事件即可,这不是本文的重点,由你随意处理^_^再添加web配置文件即web.config,在下添加

             

此文件到时候是需要发布到目标机器上的。

(关于连接数据库字符串,VS2005里面有专门的connectionStrings,本文未使用,可查阅帮助)

点击生成网站,访问页面,ok!

选择菜单生成=》发布网站:

点击确定后,网站已经生成,这些就是需要部署到目标机器上的所有文件。

点击菜单文件=》添加=》新建项目,添加安装部署项目,如图:

 

 

添加安装项目类库:

删除默认的Class1.cs,新加一个安装程序类文件,名为MyInstaller.cs:

 

在此项目中,添加对System.EnterpriseServices和System.DirectoryServices的引用,在操作IIS的时候,需要用到。

在文件中添加:

usingSystem;

usingSystem.IO;

usingSystem.DirectoryServices;

usingSystem.Reflection;

usingSystem.Data;

usingSystem.Data.SqlClient;

usingSystem.Configuration.Install;

usingSystem.Management;

usingSystem.Collections;

usingMicrosoft.Win32;

usingSystem.Collections.Specialized;

如果编译的时候出错,请添加相关引用。

修改文件如下图:

 

注意要手动添加Installer!

 

将DBSQL.txt文件放到此项目中,在属性中设置为“嵌入的资源”

 

回到MyWebSetup项目,点击查看属性,可以设置安装文件到显示相关信息,如图

 

选择文件系统,如图:

然后:

 

(在文件系统中,在属性里面可以设置安装程序默认到安装路径)

 

添加一个叫bin文件夹并添加在生成网站时bin目录下的dll文件,如图:

 

在应用程序文件夹下在生成网站时目录下的文件,添加后如图:

 

 

选择“用户界面编辑器”,添加两个文本框A和B,A将作为安装新站点后的IIS设置,B将作为数据库操作时的参数设置,调整位置后如下:

调整A的属性,这里只选择了显示两个输入框,属性分别为IISSERVER和PORT,值为localhost和9998,其他的你可以自己调整。

如图:

文本框B的设置如下:

OK,文本框设置完毕。

当然,你还可以选择其他的多种文本框,如协议什么的。

 

打开自定义操作面板:

 

 

然后:

在CustomActionData中输入:

/dbname=[DBNAME]/server=[DBSERVERNAME]/user=[USERNAME]/pwd=[PASSWORD]/iis=[IISSERVER]/port=[PORT]/targetdir="[TARGETDIR]\"

这些参数就是文本框A和B上的输入框的值,在安装过程中可以获得,然后进行处理。

至此,基本的安装文件已经制作完毕。

进行生成,然后点击安装,可以看到文件已经复制到了相应到目录。

接下来就要接收参数对IIS和数据库进行处理。

打开SetupClassLibrary项目下的MyInstaller.Designer.cs,修改此文件。

申明几个变量:

privateSystem.Data.SqlClient.SqlConnectionsqlConn;

privateSystem.Data.SqlClient.SqlCommandCommand;

private stringDBName;

private stringServerName;

private stringAdminName;

private stringAdminPwd;

     

private stringiis;

private stringport;

private stringdir;

public static stringVirDirSchemaName="IIsWebVirtualDir";

private string_target;

privateDirectoryEntry_iisServer;

privateManagementScope_scope;

privateConnectionOptions_connection;

连接数据库服务器到方法:

#regionConnectDatabase连接数据库

private boolConnectDatabase()

{

    if(Command.Connection.State!

=ConnectionState.Open)

    {

        try

        {

            Command.Connection.Open();

        }

        catch(Exceptione)

        {

            return false;

        }

    }

    return true;

}

#endregion

如果不能正确连接数据库服务器,请检查你的连接字符串,或者将连接字符串写入文件查看。

不好意思,我不知道如何对这种安装部署程序进行debug,sorry咯!

 

读取SQL文件的方法:

#regionGetSql从文件中读取SQL,在读取包含SQL脚本的文件时需要用到,参考自MSDN

private stringGetSql(stringName)

{

    try

    {

        AssemblyAsm=Assembly.GetExecutingAssembly();

        Streamstrm=Asm.GetManifestResourceStream(Asm.GetName().Name+"."+Name);

        StreamReaderreader=newStreamReader(strm);

        returnreader.ReadToEnd();

    }

    catch(ExceptiongetException)

    {

        throw newApplicationException(getException.Message);

    }

}

#endregion

可以将此需要执行的SQL脚本放在此文本中

 

执行SQL语句的方法:

#regionExecuteSql执行SQL语句,参考自MSDN

private voidExecuteSql(stringDataBaseName,stringsqlstring)

{

    Command=newSystem.Data.SqlClient.SqlCommand(sqlstring,sqlConn);

    if(ConnectDatabase())

    {

        try

        {

            Command.Connection.ChangeDatabase(DataBaseName);

            Command.ExecuteNonQuery();

        }

        finally

        {

            Command.Connection.Close();

        }

    }

}

#endregion

创建数据库及数据库表:

#regionCreateDBAndTable创建数据库及数据库表,参考自MSDN

protected boolCreateDBAndTable(stringDBName)

{

    

    boolRestult=false;

    try

    {

        ExecuteSql("master","USEMASTERIFEXISTS(SELECTNAMEFROMSYSDATABASESWHERENAME='"+DBName+"')DROPDATABASE"+DBName);

        ExecuteSql("master","CREATEDATABASE"+DBName);

        ExecuteSql(DBName,GetSql("DBSQL.txt"));

        

        Restult=true;

    }

    Catch

    {

    }

    returnRestult;

}

#endregion

从备份文件恢复数据库及数据库表

#regionRestoreDB从备份文件恢复数据库及数据库表

///

///从备份文件恢复数据库及数据库表

///

///数据库名

///配件中数据库脚本资源的名称

///

protected boolRestoreDB(stringDBName)

{

    dir=this.Context.Parameters["targetdir"];

    boolRestult=false;

    stringMSQL="RESTOREDATABASE"+DBName+

        "FROMDISK='"+dir+@"data.bak'"+

        "WITHMOVE'Test'TO'"+@"c:

\"+DBName+".mdf',"+

        "MOVE'Test_log'TO'"+@"c:

\"+DBName+".ldf'";

    try

    {

        ExecuteSql("master","USEMASTERIFEXISTS(SELECTNAMEFROMSYSDATABASESWHERENAME='"+DBName+"')DROPDATABASE"+DBName);

        ExecuteSql("master",MSQL);

        Restult=true;

    }

    finally

    {

        //删除备份文件

        try

        {

            File.Delete(dir+@"data.bak");

        }

        catch

        {

        }

    }

    returnRestult;

}

#endregion

这里可以到注册表读取SQLServer的安装路径,把恢复后的数据库文件放到data目录地下。

在本例中,只是实现了恢复,并未进行标准的操作。

其中Test和Test_log时备份时数据库的文件信息。

如果想要从备份文件中恢复,请把文件包含到项目里并且设置和DBSQL.txt一样,嵌入到程序里。

最后执行删除。

不过我想应该有办法不把文件先安装到目标机器上,而是有方法想读取DBSQL.txt文件一样,直接恢复数据库,不过确实没想到办法,失败!

网站安装好后,需要设置web.config文件,这里只涉及到连接字符串到设置,其他的可以同理修改。

从备份文件恢复数据库及数据库表

#regionWriteWebConfig修改web.config的连接数据库的字符串

private boolWriteWebConfig()

{

    System.IO.FileInfoFileInfo=newSystem.IO.FileInfo(this.Context.Parameters["targetdir"]+"/web.config");

    if(!

FileInfo.Exists)

    {

        throw newInstallException("Missingconfigfile:

"+this.Context.Parameters["targetdir"]+"/web.config");

    }

    System.Xml.XmlDocumentxmlDocument=newSystem.Xml.XmlDocument();

    xmlDocument.Load(FileInfo.FullName);

    boolFoundIt=false;

    foreach(System.Xml.XmlNodeNodeinxmlDocument["configuration"]["appSettings"])

    {

        if(Node.Name=="add")

        {

            if(Node.Attributes.GetNamedItem("key").Value=="ConnectionString")

            {

                Node.Attributes.GetNamedItem("value").Value=String.Format("PersistSecurityInfo=False;DataSource={0};database={1};UserID={2};Password={3};PacketSize=4096;Pooling=true;MaxPoolSize=100;MinPoolSize=1",ServerName,DBName,AdminName,AdminPwd);

                FoundIt=true;

            }

        }

    }

    if(!

FoundIt)

    {

        throw newInstallException("Errorwhenwritingtheconfigfile:

web.config");

    }

    xmlDocument.Save(FileInfo.FullName);

    returnFoundIt;

}

#endregion

从备份文件恢复数据库及数据库表

#regionWriteRegistryKey写注册表。

安装部署中,直接有一个注册表编辑器,可以在那里面设置。

private voidWriteRegistryKey()

{

    //写注册表

    RegistryKeyhklm=Registry.LocalMachine;

    RegistryKeycqfeng=hklm.OpenSubKey("SOFTWARE",true);

    RegistryKeyF=cqfeng.CreateSubKey("cqfeng");

    F.SetValue("FilePath","kkkk");

}

#endregion

操作IIS,建立网站等。

可参考:

用VS2005制作网页对IIS进行操作

#regionConnect连接IIS服务器

public boolConnect()

{

    if(iis==null)

        return false;

    try

    {

        _iisServer=newDirectoryEntry("IIS:

//"+iis+"/W3SVC/1");

        _target=iis;

        _connection=newConnectionOptions();

        _scope=newManagementScope(@"\\"+iis+@"\root\MicrosoftIISV2",_connection);

        _scope.Connect();

    }

    catch

    {

        return false;

    }

    returnIsConnected();

}

public boolIsConnected()

{

    if(_target==null||_connection==null||_scope==null)return false;

    return_scope.IsConnected;

}

#endregion

 

#regionIsWebSiteExists判断网站是否已经存在

public boolIsWebSiteExists(stringserverID)

{

    try

    {

        stringsiteName="W3SVC/"+serverID;

        ManagementObjectSearchersearcher=newManagementObjectSearcher(_scope,newObjectQuery("SELECT*FROMIIsWebServer"),null);

        ManagementObjectCollectionwebSites=searcher.Get();

        foreach(ManagementObjectwebSiteinwebSites)

        {

            if((string)webSite.Properties["Name"].Value==siteName)

                return true;

        }

        return false;

    }

    catch

    {

        return false;

    }

}

#endregion

#regionGetNextOpenID获得一个新的ServerID

private intGetNextOpenID()

{

   DirectoryEntryiisComputer=newDirectoryEntry("IIS:

//localhost/w3svc");

    intnextID=0;

    foreach(DirectoryEntryiisWebServeriniisComputer.Children)

    {

        stringsname=iisWebServer.Name;

        try

        {

            intname=int.Parse(sname);

            if(name>nextID)

            {

                nextID=name;

            }

        }

        catch

        {

        }

    }

    return++nextID;

}

#endregion

#regionCreateWebsite添加网站

public stringCreateWebSite(stringserverID,stringserverComment,stringdefaultVrootPath,stringHostName,stringIP,stringPort)

{

    try

    {

        ManagementObjectoW3SVC=newManagementObject(_scope,newManagementPath(@"IIsWebService='W3SVC'"),null);

        if(IsWebSiteExists(serverID))

        {

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1