ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:525.66KB ,
资源ID:23304555      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23304555.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(如何用VS制作Web安装程序.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、如何用VS制作Web安装程序如何用VS2005制作Web安装程序网站完成后,需要部署到目标机器上,方法有很多,直接把文件 Copy 到目标机器上,执行 SQL 脚本,配置 IIS ,这样可以做到;也可以使用 InstallShield 这样到专业制作软件来打包。本篇文章是使用 VS2005 自带到安装部署工具来制作 exe 安装文件。 涉及到到内容包括:使用安装部署工具,建立数据库,配置 IIS ,文件操作,注册表等。参考了网上关于使用 VS 制作安装程序的文章。环境: Windows2003 + VS2005 + SQL2005 。 注:本文只是为了实现,没有强调方法,变量等的写法标准。 使

2、用 VS2005 制作安装程序的时候,有多种选择,如下图: 我想一般常用的可能就最上面的两种。当使用 Web 安装项目时,执行制作好的 msi 安装文件时,会发现实际上是添加虚拟目录而不是添加网站,而且无法选择安装目录,当然,可以自己写脚本来对 IIS 进行修改。不过在这篇文章里,将不采用此模式。本篇文章用的是使用“安装项目”,就和打包 WinForm 程序一样,把 Web 文件部署到目标机器上,然后重写 install 方法,配置 IIS ,执行 SQL 脚本,修改 web.config 文件等。 在开始整个过程之前,需要先了解一下“预编译”的概念, MSDN 上的说明是:默认情况下,在用户

3、首次请求资源(如网站的一个页)时,将动态编译 ASP.NET 网页和代码文件。第一次编译页和代码文件之后,会缓存编译后的资源,这样将大大提高随后对同一页提出的请求的效率。请查阅 MSDN “预编译”相关文档。 准备一个文件 DBSQL.txt ,在里面包含连接数据库后需要执行的 SQL 脚本,在本例中使用了简单的一个 Create Tabel 的 SQL 。 好了,现在开干,吼吼 打开 VS2005 ,打开一个网站项目,这里是打开的本地 localhost ,如图: 新加一个页面,随便取个名字(本文中为 ClientCallback.aspx ),然后写一个简单的按钮事件即可,这不是本文的重点

4、,由你随意处理 _ 再添加 web 配置文件即 web.config ,在 下添加 此文件到时候是需要发布到目标机器上的。(关于连接数据库字符串, VS2005 里面有专门的 connectionStrings ,本文未使用,可查阅帮助) 点击生成网站,访问页面, ok ! 选择菜单生成发布网站: 点击确定后,网站已经生成,这些就是需要部署到目标机器上的所有文件。 点击菜单文件添加新建项目,添加安装部署项目,如图: 添加安装项目类库: 删除默认的 Class1.cs, 新加一个安装程序类文件,名为 MyInstaller.cs : 在此项目中,添加对 System.EnterpriseServ

5、ices 和 System.DirectoryServices 的引用,在操作 IIS 的时候,需要用到。在文件中添加: using System;using System.IO;using System.DirectoryServices;using System.Reflection;using System.Data;using System.Data.SqlClient;using System.Configuration.Install;using System.Management;using System.Collections;using Microsoft.Win32;usi

6、ng System.Collections.Specialized;如果编译的时候出错,请添加相关引用。 修改文件如下图: 注意要手动添加 Installer ! 将 DBSQL.txt 文件放到此项目中,在属性中设置为“嵌入的资源” 回到 MyWebSetup 项目,点击查看属性,可以设置安装文件到显示相关信息,如图 选择文件系统,如图: 然后: (在文件系统中,在属性里面可以设置安装程序默认到安装路径) 添加一个叫 bin 文件夹并添加在生成网站时 bin 目录下的 dll 文件,如图: 在应用程序文件夹下在生成网站时目录下的文件,添加后如图: 选择“用户界面编辑器”,添加两个文本框 A

7、和 B , A 将作为安装新站点后的 IIS 设置, B 将作为数据库操作时的参数设置,调整位置后如下: 调整 A 的属性,这里只选择了显示两个输入框,属性分别为 IISSERVER 和 PORT ,值为 localhost 和 9998 ,其他的你可以自己调整。如图: 文本框 B 的设置如下: OK ,文本框设置完毕。当然,你还可以选择其他的多种文本框,如协议什么的。 打开自定义操作面板: 然后: 在 CustomActionData 中输入: /dbname=DBNAME /server=DBSERVERNAME /user=USERNAME /pwd=PASSWORD /iis=IISS

8、ERVER /port=PORT /targetdir=TARGETDIR 这些参数就是文本框 A 和 B 上的输入框的值,在安装过程中可以获得,然后进行处理。 至此,基本的安装文件已经制作完毕。进行生成,然后点击安装,可以看到文件已经复制到了相应到目录。接下来就要接收参数对 IIS 和数据库进行处理。 打开SetupClassLibrary项目下的MyInstaller.Designer.cs,修改此文件。申明几个变量:private System.Data.SqlClient.SqlConnection sqlConn;private System.Data.SqlClient.SqlCo

9、mmand Command;privatestring DBName;privatestring ServerName;privatestring AdminName;privatestring AdminPwd;privatestring iis;privatestring port;privatestring dir;publicstaticstring VirDirSchemaName = IIsWebVirtualDir;privatestring _target;private DirectoryEntry _iisServer;private ManagementScope _sc

10、ope;private ConnectionOptions _connection;连接数据库服务器到方法:#region ConnectDatabase 连接数据库privatebool ConnectDatabase()if (Command.Connection.State != ConnectionState.Open)tryCommand.Connection.Open();catch(Exception e)returnfalse;returntrue;#endregion如果不能正确连接数据库服务器,请检查你的连接字符串,或者将连接字符串写入文件查看。不好意思,我不知道如何对这种

11、安装部署程序进行debug,sorry咯!读取SQL文件的方法:#region GetSql 从文件中读取SQL,在读取包含SQL脚本的文件时需要用到,参考自MSDNprivatestring GetSql(string Name)tryAssembly Asm = Assembly.GetExecutingAssembly();Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + . + Name);StreamReader reader = new StreamReader(strm);return reader.

12、ReadToEnd();catch (Exception getException)thrownew ApplicationException(getException.Message);#endregion可以将此需要执行的SQL脚本放在此文本中执行SQL语句的方法:#region ExecuteSql 执行SQL语句,参考自MSDNprivatevoid ExecuteSql(string DataBaseName, string sqlstring)Command = new System.Data.SqlClient.SqlCommand(sqlstring, sqlConn);if

13、(ConnectDatabase()tryCommand.Connection.ChangeDatabase(DataBaseName);Command.ExecuteNonQuery();finallyCommand.Connection.Close();#endregion创建数据库及数据库表:#region CreateDBAndTable 创建数据库及数据库表,参考自MSDNprotectedbool CreateDBAndTable(string DBName)bool Restult = false;tryExecuteSql(master, USE MASTER IF EXIST

14、S (SELECT NAME FROM SYSDATABASES WHERE NAME= + DBName + ) DROP DATABASE + DBName);ExecuteSql(master, CREATE DATABASE + DBName);ExecuteSql(DBName, GetSql(DBSQL.txt);Restult = true;Catchreturn Restult;#endregion从备份文件恢复数据库及数据库表#region RestoreDB 从备份文件恢复数据库及数据库表/ / 从备份文件恢复数据库及数据库表/ / 数据库名/ 配件中数据库脚本资源的名称/

15、 protectedbool RestoreDB(string DBName)dir = this.Context.Parameterstargetdir;bool Restult = false;string MSQL = RESTORE DATABASE + DBName + FROM DISK = + dir + data.bak + WITH MOVE Test TO + c: + DBName + .mdf, + MOVE Test_log TO + c: + DBName + .ldf ;tryExecuteSql(master, USE MASTER IF EXISTS (SEL

16、ECT NAME FROM SYSDATABASES WHERE NAME= + DBName + ) DROP DATABASE + DBName);ExecuteSql(master, MSQL);Restult = true;finally/ 删除备份文件tryFile.Delete(dir + data.bak);catchreturn Restult;#endregion这里可以到注册表读取 SQL Server 的安装路径,把恢复后的数据库文件放到 data 目录地下。在本例中,只是实现了恢复,并未进行标准的操作。其中 Test 和 Test_log 时备份时数据库的文件信息。如果

17、想要从备份文件中恢复,请把文件包含到项目里并且设置和 DBSQL.txt 一样,嵌入到程序里。最后执行删除。不过我想应该有办法不把文件先安装到目标机器上,而是有方法想读取 DBSQL.txt 文件一样,直接恢复数据库,不过确实没想到办法,失败! 网站安装好后,需要设置 web.config 文件,这里只涉及到连接字符串到设置,其他的可以同理修改。 从备份文件恢复数据库及数据库表#region WriteWebConfig 修改web.config的连接数据库的字符串privatebool WriteWebConfig()System.IO.FileInfo FileInfo = new Sys

18、tem.IO.FileInfo(this.Context.Parameterstargetdir + /web.config);if (!FileInfo.Exists)thrownew InstallException(Missing config file : + this.Context.Parameterstargetdir + /web.config);System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();xmlDocument.Load(FileInfo.FullName);bool FoundIt =

19、false;foreach (System.Xml.XmlNode Node in xmlDocumentconfigurationappSettings)if (Node.Name = add)if (Node.Attributes.GetNamedItem(key).Value = ConnectionString)Node.Attributes.GetNamedItem(value).Value = String.Format(Persist Security Info=False;Data Source=0;database=1;User ID=2;Password=3;Packet

20、Size=4096;Pooling=true;Max Pool Size=100;Min Pool Size=1, ServerName, DBName, AdminName, AdminPwd);FoundIt = true;if (!FoundIt)thrownew InstallException(Error when writing the config file: web.config);xmlDocument.Save(FileInfo.FullName);return FoundIt;#endregion从备份文件恢复数据库及数据库表#region WriteRegistryKe

21、y 写注册表。安装部署中,直接有一个注册表编辑器,可以在那里面设置。privatevoid WriteRegistryKey()/ 写注册表RegistryKey hklm = Registry.LocalMachine;RegistryKey cqfeng = hklm.OpenSubKey(SOFTWARE, true);RegistryKey F = cqfeng.CreateSubKey(cqfeng);F.SetValue(FilePath, kkkk);#endregion操作IIS,建立网站等。可参考:用VS2005制作网页对IIS进行操作#region Connect 连接II

22、S服务器publicbool Connect()if (iis = null)returnfalse;try_iisServer = new DirectoryEntry(IIS:/ + iis + /W3SVC/1);_target = iis;_connection = new ConnectionOptions();_scope = new ManagementScope( + iis + rootMicrosoftIISV2, _connection);_scope.Connect();catchreturnfalse;return IsConnected();publicbool I

23、sConnected()if (_target = null | _connection = null | _scope = null) returnfalse;return _scope.IsConnected;#endregion#region IsWebSiteExists 判断网站是否已经存在publicbool IsWebSiteExists(string serverID)trystring siteName = W3SVC/ + serverID;ManagementObjectSearcher searcher = new ManagementObjectSearcher(_s

24、cope, new ObjectQuery(SELECT * FROM IIsWebServer), null);ManagementObjectCollection webSites = searcher.Get();foreach (ManagementObject webSite in webSites)if (string)webSite.PropertiesName.Value = siteName)returntrue;returnfalse;catchreturnfalse;#endregion#region GetNextOpenID 获得一个新的ServerIDprivate

25、int GetNextOpenID()DirectoryEntry iisComputer = new DirectoryEntry(IIS:/localhost/w3svc);int nextID = 0;foreach (DirectoryEntry iisWebServer in iisComputer.Children)string sname = iisWebServer.Name;tryint name = int.Parse(sname);if (name nextID)nextID = name;catchreturn +nextID;#endregion#region CreateWebsite 添加网站publicstring CreateWebSite(string serverID, string serverComment, string defaultVrootPath, string HostName, string IP, string Port)tryManagementObject oW3SVC = new ManagementObject(_scope, new ManagementPath(IIsWebService=W3SVC), null);if (IsWebSiteExists(serverID)

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

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