vbnet打包.docx

上传人:b****5 文档编号:5600312 上传时间:2022-12-28 格式:DOCX 页数:9 大小:22.74KB
下载 相关 举报
vbnet打包.docx_第1页
第1页 / 共9页
vbnet打包.docx_第2页
第2页 / 共9页
vbnet打包.docx_第3页
第3页 / 共9页
vbnet打包.docx_第4页
第4页 / 共9页
vbnet打包.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

vbnet打包.docx

《vbnet打包.docx》由会员分享,可在线阅读,更多相关《vbnet打包.docx(9页珍藏版)》请在冰豆网上搜索。

vbnet打包.docx

vbnet打包

 打包,并自动安装SQL数据库  

  

 

       应一位网友的需求,并修正了MVP李洪根".NET平台下WEB应用程序的部署(安装数据库和自动配置)"中的osql用法错误,已测试通过。

一).创建部署项目

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. 将SQLServer备份成文件DB.dat添加到“setup1”项目(在企业管理器中右击数据库->所有工作->备份数据库,备份成一个文件,取名为DB.dat)

2. 将安装文件LisenceFile.rtf添加到“setup1”项目

3. 在用户界面编辑器中,选择许可协议,设置LisenceFile属性为LisenceFile.rtf文件

4.一般会自动将依赖项添加到“检测到的依赖项”,如果没有,那么我们要手动将其加入步骤5)

        Crystal_Managed2003.msm    (如果有水晶报表)

        dotnetfxredist_x86.msm     (.net一定是必须的)

         ...                        (如果有引用其他的dll)

5.如果使用了水晶报表,手动加入要包含的文件:

项目-->添加-->合并模块(添加你的程序文件)(包括dotNetFramework和MDAC27),位于:

C:

\ProgramFiles\CommonFiles\MergeModules\下,*为必要的

具体功能如下:

      (托管组件MSM处理所有托管组件的分发,其中包括Windows窗体查看器、Web窗体查看器和所有CrystalDecisions命名空间)

      *Crystal_Managed2003.msm

         Crystal_Managed2003_chs.msm

      (对于使报表运行所需的所有其他文件,由数据库访问MSM处理其分发。

其中包括数据库、导出和图表驱动程序。

       *Crystal_Database_access2003.msm

          Crystal_Database_access2003_chs.msm

       (KeyCodeMSM处理CrystalDecisions密钥号码的安装,注意是添加合并模块,否则没有“MergeMouduleProperties”属性)

       *Crystal_regwiz2003.msm

       (如果报表文件使用了ADO.NET的dataset数据集对象,那么VC_User_CRT71_RTL_X86_---.msm和VC_User_STL71_RTL_X86_---.msm模块也必须包含在安装工程中。

而且这两个模块的文件安装属性的"ModuleRetargetableFolder"项必须修改成为系统目录)

          VC_User_CRT71_RTL_X86_---.msm

          VC_User_STL71_RTL_X86_---.msm

       (很多人经常出现查询错误,不妨加上这个)

6.打开解决方案-->右键点击Crystal_regwiz2003.msm的属性,在“MergeMouduleProperties”里的“LicenseKey”填入:

AAP5GKS0000GDE100DS(这个是你生成CrystalReport是用到的注册号的密码!

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

方法一:

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的快捷方式

 

 八).打包時加入.net环境和MDAC功能:

把MS的PluginInstaller.msi插件装上后,用的自带的打包工具打包,就会自动把

.netframework环境打进去,再下面的步骤进行设置,就可以把MDAC也打包.

使用Setup项目安装MDAC

1.确保VisualStudio.NET框架引导程序插件已安装。

2.在SolutionExplorer中选择Setup项目。

 从View菜单指向Editor,并选择LaunchConditions(启动条件)。

3.选择RequirementsonTargetMachine(搜索目标计算机)节点。

 从Action菜单,选择AddRegistryLaunchCondition(添加注册表搜索)。

4.选择SearchforRegistryEntry1节点。

在Properties窗口中,

 选择RegKey属性,并键入Software\Microsoft\DataAccess。

5.选择Root属性,并选择vsdrrHKLM。

6.选择Value属性,并键入FullInstallVer。

7.选择Property属性,并键入MDACSEARCH。

8.在LaunchConditionsEditor(启动条件)中,添加Condition1节点。

 选择Condition1节点,在Properties窗口中,选择Condition属性,并选择MDACSEARCH>="2.6"。

9.在SolutionExplorer中选择Setup项目。

在Project菜单上,选择Properties。

10.将Bootstrapper属性设置为WindowsInstallerBootstrapper(Windows安装引导程序)。

附:

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

ImportsSystem.ComponentModel

ImportsSystem.Configuration.Install

 

PublicClassInstaller1

InheritsSystem.Configuration.Install.Installer

 

#Region"组件设计器生成的代码"

 

PublicSubNew()

MyBase.New()

 

'该调用是组件设计器所必需的。

InitializeComponent()

 

'在InitializeComponent()调用之后添加任何初始化

 

EndSub

 

'Installer重写dispose以清理组件列表。

ProtectedOverloadsOverridesSubDispose(ByValdisposingAsBoolean)

IfdisposingThen

IfNot(componentsIsNothing)Then

components.Dispose()

EndIf

EndIf

MyBase.Dispose(disposing)

EndSub

 

'组件设计器所必需的

PrivatecomponentsAsSystem.ComponentModel.IContainer

 

'注意:

以下过程是组件设计器所必需的

'可以使用组件设计器来修改此过程。

'不要使用代码编辑器来修改它。

PrivateSubInitializeComponent()

components=NewSystem.ComponentModel.Container

EndSub

 

#EndRegion

 

 

PublicOverridesSubInstall(ByValstateSaverAsSystem.Collections.IDictionary)

MyBase.Install(stateSaver)

IfNotInstallDB()Then

'失败,反安装

Me.Uninstall(stateSaver)

ExitSub

EndIf

DeleteFile(String.Format("{0}DB.dat",Me.Context.Parameters.Item("targetdir")))

EndSub

 

PublicOverridesSubUninstall(ByValstateSaverAsSystem.Collections.IDictionary)

'执行反安装

MyBase.Uninstall(stateSaver)

DeleteFile(String.Format("{0}DB.dat",Me.Context.Parameters.Item("targetdir")))

EndSub

 

PrivateSubDeleteFile(ByValpathsAsString)

'删除指定的文件

Try

DimdelFileAsNewSystem.IO.FileInfo(paths)

IfdelFile.ExistsThen

delFile.Delete()

EndIf

CatchexAsException

EndTry

EndSub

 

PrivateSubCreateSql(ByValpathsAsString)

DimFileAsSystem.IO.StreamWriter

DimdbAsString=String.Format("{0}",Me.Context.Parameters.Item("dbname"))

DimpathAsString=String.Format("{0}",Me.Context.Parameters.Item("targetdir"))

Try

DimsAsNewSystem.Text.StringBuilder

s.Append("usemaster"&vbCrLf)

s.Append(""&vbCrLf)

s.Append("ifnotexists(select*fromsysdatabaseswherename='"&db&"')"&vbCrLf)

s.Append("createdatabase"&db&vbCrLf)

s.Append(""&vbCrLf)

s.Append("ifexists(select*fromsysdeviceswherename='DBdisk')"&vbCrLf)

s.Append("EXECsp_dropdevice'DBdisk'"&vbCrLf)

s.Append("Else"&vbCrLf)

s.Append("EXECsp_addumpdevice'disk','DBdisk','"&path&"DB.dat'"&vbCrLf)

s.Append(""&vbCrLf)

s.Append("restoredatabase"&db&vbCrLf)

s.Append("fromdisk='"&path&"DB.dat'"&vbCrLf)

s.Append("withreplace")

File=NewSystem.IO.StreamWriter(paths)

File.Write(s.ToString)

CatchexAsException

Finally

File.Close()

EndTry

EndSub

 

PrivateFunctionInstallDB()AsBoolean

'安装数据库,调用自动批处理。

Try

'创建临时脚本

CreateSql(String.Format("{0}Mydb2000tp.sql",Me.Context.Parameters.Item("targetdir")))

'调用osql执行脚本

DimsqlProcessAsNewSystem.Diagnostics.Process

sqlProcess.StartInfo.FileName="osql.exe"

sqlProcess.StartInfo.Arguments=String.Format("-U""{0}""-P""{1}""-S""{2}""-i""{3}Mydb2000tp.sql""",Me.Context.Parameters.Item("user"),Me.Context.Parameters.Item("pwd"),Me.Context.Parameters.Item("server"),Me.Context.Parameters.Item("targetdir"))

sqlProcess.StartInfo.WindowStyle=ProcessWindowStyle.Hidden

sqlProcess.Start()

sqlProcess.WaitForExit()'等待执行

sqlProcess.Close()

'删除脚本文件

DeleteFile(String.Format("{0}Mydb2000tp.sql",Me.Context.Parameters.Item("targetdir")))

ReturnTrue

CatchexAsException

ReturnFalse

EndTry

EndFunction

 

EndClass

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

当前位置:首页 > 农林牧渔

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

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