web打包自动安装IIS和数据库

原创 2007年09月14日 16:57:00
使用VS2005制作安装包。
1.在“新建项目”对话框的左侧树状图中选择“Other Project Types”->“Setup and Deployment”节点,在右侧选择“Web Setup Project”。

2.在Solution Explorer中在Solution上点右键,选择“Add”->“Existing Web Site”,将存放编译好的Web网站的文件夹加入Solution中。

如果添加使用aspnet_compiler编译好的网站,有可能会出现下面的提示框,点击“是”就行。


3.再添加一个新的“Class Library”,名称“CreateDB”,用以创建数据库的操作。


删除默认生成的“class1.cs”,在这个项目上点右键,选择“Add”->“New Item”,在弹出的对话框中选择“Installer Class”,点击OK。

在类中添加如下代码:
private void ExecuteSql(string connectionString, string databaseName, string sql)
{
SqlConnection sqlConnection = new SqlConnection(connectionString);
SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection);
try
{
sqlCommand.Connection.Open();
sqlCommand.Connection.ChangeDatabase(databaseName);
sqlCommand.ExecuteNonQuery();
}
catch (Exception exception)
{
throw exception;
}
finally
{
sqlCommand.Connection.Close();
}
}

public override void Install(System.Collections.IDictionary stateSaver)
{
string server = this.Context.Parameters["server"];
string database = this.Context.Parameters["dbname"];
string user = this.Context.Parameters["user"];
string password = this.Context.Parameters["pwd"];
string targetDir = this.Context.Parameters["targetdir"];

try
{
string connectionString = String.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096",
server, user, password);

//create db
ExecuteSql(connectionString, "master", "CREATE DATABASE " + database);

//set user
string setUserString = "sp_addlogin 'PrinteryERP', 'PrinteryERP', 'PrinteryERP'";
string setAccessString = "sp_grantdbaccess 'PrinteryERP'";
string setRole = "sp_addrolemember 'db_owner', 'PrinteryERP'";

//create new user login
try
{
ExecuteSql(connectionString, "master", setUserString);
}
catch { }

//set default database
try
{
ExecuteSql(connectionString, "PrinteryERP", setAccessString);
}
catch { }

//set read role
try
{
ExecuteSql(connectionString, "PrinteryERP", setRole);
}
catch { }

//create table,store produce......
Process osqlProcess = new Process();
osqlProcess.StartInfo.FileName = targetDir + "osql.exe";
osqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -S {2} -d {3} -i {4}createdb.sql",
user, password, server, database, targetDir);
osqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
osqlProcess.Start();
osqlProcess.WaitForExit();
osqlProcess.Close();

//add data
osqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -S {2} -d {3} -i {4}insertdata.sql",
user, password, server, database, targetDir);
osqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
osqlProcess.Start();
osqlProcess.WaitForExit();
osqlProcess.Close();
}
catch (Exception exception)
{
throw exception;
}

try
{
string configFile = targetDir + "/Web.config";
if (!File.Exists(configFile))
{
throw new InstallException("没有找到配置文件。");
}

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(configFile);

GC.Collect();
File.Delete(configFile);
GC.Collect();

foreach (XmlNode xmlNode in xmlDoc["configuration"]["connectionStrings"].ChildNodes)
{
if (xmlNode.Name == "add")
{
if (xmlNode.Attributes["name"].Value == "DBConnection")
{
xmlNode.Attributes["connectionString"].Value = String.Format("Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID=PrinteryERP;Password=PrinteryERP",
server, database);
}
if (xmlNode.Attributes["name"].Value == "UserManageServicesConnection")
{
xmlNode.Attributes["connectionString"].Value = String.Format("Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID=PrinteryERP;Password=PrinteryERP",
server, database);
}
}
}
xmlDoc.Save(configFile);
}
catch (Exception exception)
{
throw exception;
}
}
4.在“Web Setup Project”项目上点右键,选择“Add”->“Project Output”,选择Project“CreateDB”,选择“Primary Output”,点击OK。重复上述动作,将选择刚才添加的Web Site,选择“Content Files”,点击OK。




5.在“Web Setup Project”项目上点右键,选择“Add”->“File”,将创建数据库表、存储过程和视图的脚本createdb.sql加入。重复,将向数据表中添加基础数据的脚本insertdata.sql加入。重复,将程序osql.exe加入。
6.在“Web Setup Project”项目上点右键,选择“Add”->“Merge Module”,在弹出的对话框中选择“VC_User_CRT71_RTL_X86_---.msm”,点击OK。添加这个VC运行库是因为在一台干净的机器上测试的时候发现osql.exe这个程序需要这个库。 
7.在“Web Setup Project”项目上点右键,选择“Properties”,在弹出的对话框中可以设置一些安装程序的属性。点击按钮“Prerequisites”,在弹出的对话框中选中“.NET Framework 2.0”和“Windows Installer 3.1”,选中“Download prerequisites from the same location as my application”。这样就可以把这些组件和应用程序打包在一起,安装的时候自动检测并安装了。如果需要部署的计算机如果没有打过最新的补丁的话,是没有“Windows Installer 3.1”的,如果没有这个组件,“.NET Framework 2.0”是不能安装的。

8.在“Web Setup Project”项目上点右键,选择“View”->“Custom Actions”,在出现的树状图的节点“Install”上点右键,选择“Add Custom Actions”。在弹出的对话框中“Look in”中选择“Web Application Folders”,在下面选择“Primary output from CreateDB (Active)”,点击OK。


9.在“Web Setup Project”项目上点右键,选择“View”->“User Interface”,在出现的树状图节点“Install”的子节点“Start”上点击右键,选择“Add Dialog”,在弹出的对话框中选择“TextBoxes(A)”。

在新添加的节点“TextBoxes (A)”上点击右键,选择“Properites Window”,依次设置Edit*Property属性为“CUSTOMTEXTA1”,“CUSTOMTEXTA2”,“CUSTOMTEXTA3”和“CUSTOMTEXTA4”。

10.在刚刚建立的“Primary output from CreateDB (Active)”节点上点右键,选择“Properties Window”,设置“CustomActionData”属性为“/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]/"”。

接下来对整个解决方案进行编译,会在输出目录下生成两个文件夹和两个文件。
两个文件夹中分别包含了.NET Framework 2.0和Windows Installer3.1的安装包。另外的两个文件分别是(项目名称).msi和setup.exe。如果要进行安装,请执行setup.exe。 
 

用InstallShield9 进行ASP软件的打包和数据库自动安装

//近期公司用ASP+SQL开发办公自动化OA,需要制作安装程序发行,此脚本是用IS9.0制作,以此共享,与各同仁交流学习#define BITMAP_ID 1#include "ifx.h" //不...
  • smoothy
  • smoothy
  • 2005年01月07日 20:07
  • 898

IIS6,IIS7,IIS8的脚本自动安装

这几天在
  • xdryhp164
  • xdryhp164
  • 2014年11月12日 16:26
  • 1754

数据仓库和数据库有什么区别

数据仓库是面向分析的,数据库是面向事务处理. 数据仓库的数据是基本不变得,而数据库的数据是由日常的业务产生的,常更新 数据仓库的数据一般有数据库的数据经过一定的规则转换得到得 数据仓库主要...
  • johnjobs
  • johnjobs
  • 2014年07月09日 18:07
  • 1054

Redis和硬盘数据库一起使用好吗?

原文地址:http://redis.io/topics/faq Is using Redis together with an on-disk database a good idea? Ye...
  • tanga842428
  • tanga842428
  • 2016年09月23日 18:23
  • 323

数据库和网络工程师哪一个比较有用?

大家评价一下:是在以后的工作生活中是网络工程师的知识用得比较多,还是数据库?...
  • YXMUFO
  • YXMUFO
  • 2011年06月20日 23:41
  • 346

redis缓存中写入数据与数据库数据同步

这个就是在执行数据的方法之前或之后写入, 例子: ValueOperations value = redisTemplate.opsForValue();   value.set("lockse...
  • anmoyyh
  • anmoyyh
  • 2017年07月07日 10:29
  • 180

数据库表字段/JSP页面Input域name属性/项目entity类成员变量名称一致

数据库表字段/JSP页面Input域name属性/项目entity类成员变量名称一致
  • chengp919
  • chengp919
  • 2017年08月02日 22:25
  • 197

InstallShield中IIS服务的检测和组件自动安装的实现

由于最近封装的安装程序里面需要涉及到数据库配置及IIS服务器配置等功能,数据库相关问题已经解决,但是IIS组件的自动安装一直没有搞定,今天去销售那里测试,虽然把很多安装过程都自动化了,他们也觉得现在这...
  • wangqi0079
  • wangqi0079
  • 2013年03月07日 15:04
  • 1948

linux下web服务器与数据库服务器的分离问题。

两台linux服务器,一个是web服务器(有外网IP),用ftp传网站的源文件,装的是apache2+tomcat5.0+jdk1.5,另一台mysql5.0数据库服务器(只设置内网IP)。两台服务器...
  • sui726
  • sui726
  • 2008年05月06日 10:08
  • 176

WEB应用防火墙与数据库应用防火墙有什么区别

WEB应用防火墙专注于WEB应用系统和网站的应用层防护,解决了传统网络防火墙难以应对的问题。 主要功能包括: 1.精确识别OWASP Top 10等各种WEB通用攻击 2.有效应对盗链、跨站请求伪造等...
  • wzhqazcscs
  • wzhqazcscs
  • 2016年10月06日 13:22
  • 1305
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:web打包自动安装IIS和数据库
举报原因:
原因补充:

(最多只允许输入30个字)