net打包自动安装数据库.docx

上传人:b****6 文档编号:7649410 上传时间:2023-05-11 格式:DOCX 页数:10 大小:18.17KB
下载 相关 举报
net打包自动安装数据库.docx_第1页
第1页 / 共10页
net打包自动安装数据库.docx_第2页
第2页 / 共10页
net打包自动安装数据库.docx_第3页
第3页 / 共10页
net打包自动安装数据库.docx_第4页
第4页 / 共10页
net打包自动安装数据库.docx_第5页
第5页 / 共10页
net打包自动安装数据库.docx_第6页
第6页 / 共10页
net打包自动安装数据库.docx_第7页
第7页 / 共10页
net打包自动安装数据库.docx_第8页
第8页 / 共10页
net打包自动安装数据库.docx_第9页
第9页 / 共10页
net打包自动安装数据库.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

net打包自动安装数据库.docx

《net打包自动安装数据库.docx》由会员分享,可在线阅读,更多相关《net打包自动安装数据库.docx(10页珍藏版)》请在冰点文库上搜索。

net打包自动安装数据库.docx

net打包自动安装数据库

.net打包自动安装数据库

本文介绍的是.net打包自动安装数据库的方法和代码

一).创建部署项目

1.在“文件”菜单上指向“添加项目”,然后选择“新建项目”。

2. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。

在“名称”框中键入setup1。

3. 单击“确定”关闭对话框。

 

4. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。

 

5. 在“属性”窗口中,选择ProductName属性,并键入信息管理系统。

 

二).将主程序项目的输出添加到部署项目中

 

1. 在“文件系统编辑器”中,选择“应用程序文件夹”。

在“操作”菜单上,指向“添加”,然后选择“项目输出”。

 

2. 在“添加项目输出组”对话框中,选择“项目”下拉列表中的“你的程序”。

 

3. 单击“确定”关闭对话框。

 

4. 从列表中选择“主输出”和“内容文件”组,然后单击“确定”。

 

三).创建安装程序类

 

1. 在“文件”菜单上指向“新建”,然后选择“项目”。

 

2. 在“新建项目”对话框中,选择“项目类型”窗格中的“VisualBasic项目”,然后选择“模板”窗格中的“类库”。

在“名称”框中键入installDB。

 

3. 单击“打开”关闭对话框。

 

4. 从“项目”菜单中选择“添加新项”。

 

5. 在“添加新项”对话框中选择“安装程序类”。

在“名称”框中键入installDB。

 

6. 单击“确定”关闭对话框。

 

7. 详细代码附后。

 

四).创建自定义安装对话框

 

1. 在解决方案资源管理器中选择“setup1”项目。

在“视图”菜单上指向“编辑器”,然后选择“用户界面”。

2. 在用户界面编辑器中,选择“安装”下的“启动”节点。

在“操作”菜单上,选择“添加对话框”。

3. 在“添加对话框”对话框中,选择“许可协议”对话框,然后单击“确定”关闭对话框。

4. 在“添加对话框”对话框中,选择“文本框(A)”对话框,然后单击“确定”关闭对话框。

5. 在“操作”菜单上,选择“上移”。

重复此步骤,直到“文本框(A)”对话框位于“安装文件夹”节点之上。

6. 在“属性”窗口中,选择BannerText属性并键入:

安装数据库.

7. 选择BodyText属性并键入:

安装程序将在目标机器上安装数据库

8. 选择Edit1Label属性并键入:

数据库名称:

9. 选择Edit1Property属性并键入CUSTOMTEXTA1

10. 选择Edit1Value属性并键入:

dbservers

11. 选择Edit2Label属性并键入:

服务器名:

12. 选择Edit2Property属性并键入CUSTOMTEXTA2

13. 选择Edit2Value属性并键入:

(local)

14. 选择Edit3Label属性并键入:

用户名:

15. 选择Edit3Value属性并键入:

sa

16. 选择Edit3Property属性并键入CUSTOMTEXTA3

17. 选择Edit4Label属性并键入:

密码:

18. 选择Edit4Property属性并键入CUSTOMTEXTA4

19. 选择Edit2Visible、Edit3Visible和Edit4Visible属性,并将它们设置为true

 

五).创建自定义操作

 

1. 在解决方案资源管理器中选择“setup1”项目。

在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。

2. 在自定义操作编辑器中选择“安装”节点。

在“操作”菜单上,选择“添加自定义操作”。

3. 在“选择项目中的项”对话框中,双击“应用程序文件夹”。

4. 选择“主输出来自installDB(活动)”项,然后单击“确定”关闭对话框。

5. 在“属性”窗口中,选择CustomActionData属性并键入“/dbname=[CUSTOMTEXTA1]/server=[CUSTOMTEXTA2]/user=[CUSTOMTEXTA3]/pwd=[CUSTOMTEXTA4]/targetdir="[TARGETDIR]\"”。

 

附:

/targetdir="[TARGETDIR]\"是安装后的目标路径,为了在installDB类中获得安装后的路径,我们设置此参数。

 

六).打包時加入卸载功能:

 

方法一:

1.在打包項目中添加文件msiexec.exe(一般可在c:

\windows\system32\下找到)

2.在文件系統視圖中選擇應用程序文件夾,在msiexec.exe上按右鍵,選擇創建快捷方式,重命名快捷方式為"卸载".

3.更改此快捷方式的Arguments为"/x{產品id}",產品id的值為打包項目的ProductCode屬性值.

 

方法二:

(推荐)

1.先生成安装包,记下ProductCode(选择解决方案资源管理器根目录如setup1,再查看属性标签,不是右键中的属性),下面要用到

2.用VS.net建立一个新的控制台程序uninst.exe文件

'powerby:

landlordh

'for2000,xp,2003

Moduleuninstall

SubMain()

DimmyProcessAsProcess=NewProcess

IfSystem.Environment.OSVersion.ToString.IndexOf("NT5")Then

myProcess.Start("msiexec","/X{2B65D4A9-C146-4808-AB4B-321FB0779559}") '改为自己的ProductCode

EndIf

myProcess.Close()

EndSub

EndModule

3.将控制台程序BIN目录的exe文件加入到打包程序文件中,在程序组创建uninst.exe的快捷方式

 

installdb.vb类,要添加引用system.configuration.install.dll:

usingSystem;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Configuration.Install;

usingSystem.Reflection;

usingSystem.IO;

usingSystem.Data;

usingSystem.Data.SqlClient;

namespaceinstall

{

///

///Installer1的摘要说明。

///

[RunInstaller(true)]

publicclassInstaller1:

System.Configuration.Install.Installer

{

///

///必需的设计器变量。

///

privateSystem.ComponentModel.Containercomponents=null;

  publicInstaller1()

{

//该调用是设计器所必需的。

InitializeComponent();

   //TODO:

在InitializeComponent调用后添加任何初始化

}

  ///

///清理所有正在使用的资源。

///

protectedoverridevoidDispose(booldisposing)

{

if(disposing)

{

if(components!

=null)

{

components.Dispose();

}

}

base.Dispose(disposing);

}

#region组件设计器生成的代码

///

///设计器支持所需的方法-不要使用代码编辑器修改

///此方法的内容。

///

privatevoidInitializeComponent()

{

components=newSystem.ComponentModel.Container();

}

#endregion

  private stringGetSql(stringName) 

//   //调用osql执行脚本

//

//   System.Diagnostics.ProcesssqlProcess=newSystem.Diagnostics.Process();

//

//   sqlProcess.StartInfo.FileName="osql.exe";

//

//   sqlProcess.StartInfo.Arguments=String.Format("-U{0}-P{1}-d{2}-i{3}db.sql",this.Context.Parameters["user"],this.Context.Parameters["pwd"],"master",this.Context.Parameters["targetdir"]);

//

//   sqlProcess.StartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;

//

//   sqlProcess.Start();

//

//   sqlProcess.WaitForExit();//等待执行

//

//   sqlProcess.Close();

try 

//    AssemblyAsm=Assembly.GetExecutingAssembly();

//    System.IO.FileInfoFileInfo=newSystem.IO.FileInfo(Asm.Location);

//    stringpath=FileInfo.DirectoryName+@"\"+Name;

stringpath=this.Context.Parameters["targetdir"]+Name;

FileStreamfs=newFileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read);

StreamReaderreader=newStreamReader(fs,System.Text.Encoding.Default); 

//System.Text.Encoding.ASCII;

returnreader.ReadToEnd(); 

   } 

catch(Exceptionex) 

Console.Write("InGetSql:

"+ex.Message); 

throwex; 

  privatevoidExecuteSql(stringDataBaseName,stringSql) 

{

SqlConnectionsqlConnection1=newSqlConnection();

sqlConnection1.ConnectionString=string.Format("server={0};userid={1};password={2};Database=master",this.Context.Parameters["server"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);

System.Data.SqlClient.SqlCommandCommand=newSystem.Data.SqlClient.SqlCommand(Sql,sqlConnection1); 

try 

{

Command.Connection.Open(); 

Command.Connection.ChangeDatabase(DataBaseName); 

Command.ExecuteNonQuery(); 

catch(Exceptionex) 

Console.Write("Inexceptionhandler:

"+ex.Message); 

}

finally 

Command.Connection.Close(); 

protectedvoidAddDBTable(stringstrDBName) 

try 

{     

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

ExecuteSql(strDBName,GetSql("sql.txt")); 

ExecuteSql("master","execsp_addlogin'myoamaster','myoamaster','"+strDBName+"',Null,Null");

ExecuteSql(strDBName,"EXECsp_grantdbaccess'myoamaster','myoamaster'");

ExecuteSql(strDBName,"execsp_addrolemember'db_owner','myoamaster'");

catch(Exceptionex) 

Console.Write("Inexceptionhandler:

"+ex.Message); 

  publicoverridevoidInstall(System.Collections.IDictionarystateSaver) 

base.Install(stateSaver); 

AddDBTable(this.Context.Parameters["dbname"]); 

}

}

这里有个sql.txt是数据库的sql脚本,当然可以调用osql来执行sql脚本,其实是一样的。

打包的时候必须把sql.txt文件加进来,否则不会执行。

如果你想附加数据库的mdf文件和ldf文件,用下面这段程序:

privatevoidCreateDataBase(stringstrSql,stringDataName,stringstrMdf,stringstrLdf)

{

Stringstr;

SqlConnectionmyConn=newSqlConnection(strSql);

   //EXECsp_detach_db@dbname='BX_FreightMileage_2'//需要先将数据库分离出来

str="EXECsp_attach_db@dbname='"+DataName+"',@filename1='"+strMdf+"',@filename2='"+strLdf+"'";

   SqlCommandmyCommand=newSqlCommand(str,myConn);

myConn.Open();

myCommand.ExecuteNonQuery();

myConn.Close();

}

当然打包的时候也要把这两个数据库文件也加进来。

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2