vbnet打包.docx
- 文档编号:7606886
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:9
- 大小:22.74KB
vbnet打包.docx
《vbnet打包.docx》由会员分享,可在线阅读,更多相关《vbnet打包.docx(9页珍藏版)》请在冰点文库上搜索。
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
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
'注意:
以下过程是组件设计器所必需的
'可以使用组件设计器来修改此过程。
'不要使用代码编辑器来修改它。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vbnet 打包