VBNET安装工程的技巧与实现

技巧

刚听了SMART CLIENT部署的讲座,里面详细讲述了如果在.NET安装工程里运行自定义的DLL或者EXE,以后在自定义的工程中如何得到安装工程的传递过来的参数。下面大致说一下自己的心得:
首先,是制作一个类工程。然后添加一个安装类文件,并添加一个SQL.TXT文件,当作嵌入的资源,类的代码如下,在后面再做说明:
Dim Cn As SqlConnection
'得到SQL脚本字符串
Private Function GetSql(ByVal Name As String) As String
Try
'通过反射取到程序集
Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()
'读取资源文件资料,要将资源文件在编译时设成嵌入的资源
Dim Sm As Stream = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name)
Dim Rr As New StreamReader(Sm)
Return Rr.ReadToEnd
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.OKOnly, "出错提示")
Throw ex
End Try
End Function
'得到数据库备份文件路径
Private Function GetBakFilePath(ByVal DatFileName As String) As String
Try
'通过反射取到程序集
Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()
'读取资源文件资料,要将资源文件在编译时设成嵌入的资源
Dim Sm As Stream = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + DatFileName)
If File.Exists("c:\" & DatFileName) Then
File.Delete("c:\" & DatFileName)
End If
Dim Fs As New FileStream("c:\" & DatFileName, FileMode.Create)
Dim Sw As New BinaryWriter(Fs)
Dim recbyte(Sm.Length - 1) As Byte
Dim strread As New BinaryReader(Sm)
strread.Read(recbyte, 0, recbyte.Length)
Sw.Write(recbyte, 0, recbyte.Length)
Sw.Close()
Fs.Close()
Return "C:\" & DatFileName
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.OKOnly, "出错提示")
Throw ex
End Try
End Function
Private Sub ExecuteSql(ByVal DbName As String, ByVal SqlText As String, ByVal uid As String, ByVal pwd As String, ByVal servername As String)
Dim cmd As New SqlCommand(SqlText, Cn)
If Cn.State = ConnectionState.Closed Then Cn.Open()
Try
Cn.ChangeDatabase(DbName)
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox("运行SQL脚本出错!", MsgBoxStyle.OKOnly, "提示")
Throw ex
End Try
Cn.Close()
End Sub
Protected Sub AddDBTable(ByVal DBName As String, ByVal uid As String, ByVal pwd As String, ByVal servername As String)
'判断数据库是否存在
Try
Cn = New SqlConnection("Persist Security Info=False;User ID=" & uid & ";Initial Catalog=master;Data Source=" & servername & ";password=" & pwd & ";Max Pool Size=75000")
Dim Dt As New DataTable()
Cn.Open()
Dim cmd As New SqlDataAdapter()
cmd.SelectCommand = New SqlCommand("exec sp_helpdb", Cn)
cmd.Fill(Dt)
Dim i As Int16
For i = 0 To Dt.Rows.Count - 1
If DBName.ToLower = CType(Dt.Rows(i).Item(0), String).ToLower Then
'数据库存在
cmd = Nothing
Cn.Close()
Exit Sub
End If
Next
Catch ex As Exception
MsgBox(Err.Description & "连接数据库出错,请检查所输入的参数是否正确!", MsgBoxStyle.OKOnly, "出错提示")
Exit Sub '如已存在则跳出
End Try

Try
'========方法一:运行SQL脚本创建数据库
' ExecuteSql("Master", "Create DataBase " & DBName, uid, pwd, servername)
'ExecuteSql(DBName, GetSql("mySql.txt"), uid, pwd, servername)
'========方法二:执行还原备份文件
Dim cm As New ADODB.Command()
Dim cn As New ADODB.Connection()
Dim dbrs As New ADODB.Recordset()
cn.Open("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" & uid & ";Initial Catalog=master;Data Source=" & servername & ";password=" & pwd)
cm.ActiveConnection = cn
'判断该数据是否存在,存在就删除
cm.CommandText = "exec sp_helpdb"
dbrs = cm.Execute() '取所有数据库名
If Not dbrs.BOF And Not dbrs.EOF Then
Do While Not dbrs.EOF
If Trim(dbrs.Fields(0).Value) = Trim(DBName) Then '如果该数据库存
cm.CommandText = "drop database " & Trim(DBName)
cm.Execute()
Exit Do
End If
dbrs.MoveNext()
Loop
End If
' dbrs.Close()
Dim Sfile As String = GetBakFilePath("installdb.dat")
cm.CommandText = "restore database " & Trim(DBName) & " from DISK='" & Trim(Sfile) & "'"
cm.Execute()
cn.Close()
If File.Exists(Sfile) Then
File.Delete(Sfile)
End If
Catch ex As Exception
MsgBox(Err.Description & "A", MsgBoxStyle.OKOnly, "出错提示")
Throw ex
End Try
End Sub

'覆写安装方法
Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)
'取安装程序中用户界面中添回的文本框中的参数值
Dim Connstr As String = Me.Context.Parameters.Item("dbname")
Dim Cs As String() = Split(Connstr, "|")
AddDBTable(Cs(0), Cs(1), Cs(2), Cs(3))
End Sub

然后添加一个安装工程,将上面的类的工程做为项目主输出添进来.在用户界面中加一个文本框

然后在文本框的四个属性中输入参数名称..

这里设置了四个参数,在安装运行的时候,会有界面让你输入四个参数,在自定义操作里的安装项目上,将所加载进来的项目主输入选中置入.

并将属性CustomActionData设置为/参数名=[][][][]...以这种方式写入在文件框中设置好的参数,我们再看一下上面类中的代码:
Dim Connstr As String = Me.Context.Parameters.Item("dbname")
便会取到参数dbname的值,亦就是在安装界面时要用户输入的值.
类中还覆写了Install方法.会自动运行,并执行用户自定义的程序代码.代码与平时所编的VBNET一样.
上面的代码做了二种情况,一种是从嵌入的文本文件中取得SQL语句,运行它创建数据库.另一种是用
SQL数据备份的DAT文件做为嵌入资源,在安装过程中,由用户输入的参数为条件,连接SQL服务器并还原数据库...

时间: 2024-09-12 04:45:05

VBNET安装工程的技巧与实现的相关文章

Linux无网络安装GCC的技巧(需要安装光盘或ISO镜像)

  GCC是GNU编译器套件,需在有网络的情况下安装,其安装简单,但无网络能不能安装GCC呢?其实是可以的,下面小编就给大家介绍下Linux无网络安装GCC的技巧,一起来了解下吧. 在有网络的情况下安装gcc只需一条指令:yum install gcc 那么在没有网络的情况下该如何安装gcc呢?虽然没有网络,但需要有安装光盘或者ISO镜像,利用安装光盘或ISO镜像来挂载一个本地yum源,利用这个来安装gcc. 步骤: 一:挂载yum源,我这里用的是ISO镜像 在终端输入指令:mount -o l

PHP 开发环境配置(Zend Server安装)_php技巧

开发环境配置(Zend Server安装)_php技巧-zend server 配置">    这里不做改动,维持默认选择即可     点击Browse按钮更改安装目录为D盘     更改Web Server Port为85 以避免跟IIS冲突   安装完成因Zend Server存在配置文件编码的错误,需要手工做更改.   用记事本打开D:\Program Files\Zend\ZendServer\etc\ZendEnablerConf.xml文件. 将 锘??xml version=

Photoshop笔刷的安装与管理技巧

初学者经常遇到如何在Photoshop中安装笔刷.形状,因此这次PS教程将会对此做出说明,并顺带详述一些技巧,以便帮助你保持附件的条理性和稳定性. 第一步 在此教程中,我们将会专门讨论Photoshop的笔刷,但是对于添加和管理色板.渐变.样式.图案.等高线.自定形状和工具也同样适用,所以即使我们只讲述笔刷的内容,这些方法也可以应用到所有预设中.进入这节课的核心内容前,让我们先快速浏览一下Photoshop"自带笔刷"和使用方法. 我们可以在photoshop的笔刷面板中随心所欲地保存

PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法_php技巧

本文实例讲述了PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法.分享给大家供大家参考,具体如下: php连接oracle数据库虽然不是最佳拍档,但组内开发确实有这样需求.如果没有参考合适的文档,这个过程还是挺折磨人的,下面是一个记录,原型是国外的一篇博客 Installing PDO_OCI and OCI8 PHP extensions on CentOS 6.4 64bit . 假设你已经安装好php的环境,php版本为5.3,要连接的oracle服务器是 11g R2,操作

PHP模块化安装教程_php技巧

本文讲述了PHP模块化安装的方法.分享给大家供大家参考,具体如下: PHP(Hypertext Preprocessor)这门虽然简单但功能却是非常强大的脚本语言,下面就 基于WindowsXP+sp2的操作平台下的 Apache2.0.53+php5.2.1安装及基本配置过程记录下来以供参考: 一.首先从各官方网站下载以下程序: 1. apache_2.0.53-win32-x86-no_ssl.exe 2. php-5.2.1-Win32.zip (二进制压缩包) 二.安装及配置过程: 1.

asp.net(c#) MS AJAX的安装_实用技巧

见ASP.NET(www.asp.net)上贴了很久的MS AJAX视频和相关资料,国内却很少有人提起他,今天给大家简单说下我在学习AJAX初期所遇到的最大的困难――安装.仔细看了www.asp.net的AJAX栏目下载了ASP.NET AJAX 1.0 RC高高兴兴拿去安装,装好后打开.NET2005,发现工具栏里边多了一个标签,如下图: 然后在ASP.NET网站上找到了在线的文档,并学习了几个控件的简单应用,感觉还瞒是不错的.然后兴致勃勃的回到ASP.NET网站Learn栏目下观看AJAX视

Serv-U安装及基本设置技巧

一.安装 展开压缩文件"ServU3b7.zip",执行其中的"setup.exe",即可开始安装;全部选默认选项即可.安装完成后不需重新启动,直接在"开始→程序→Serv-U FTP Server"中就能看到相关文件.如下图: 二.建立第一个可用的FTP服务器 1.比如本机IP地址为"192.168.0.48",已建立好域名"ftp.bbc.com"的相关DNS记录. 2.打开Serv-U管理器.选上图的

Windows98/2000安装与卸载技巧

1.提高DOS状态下安装Windows 98/2000的速度 首先用启动盘启动电脑,在DOS下运行Smartdrv.exe后再安装Windows系统,这样安装时间将大大缩短. 注意:要运行Smartdrv.exe,DOS系统在启动过程中必须加载Windows的系统文件himem.sys.Smartdrv.exe文件一般在C盘Windows目录下,假如机器没有装Windows 9X,可以从别的机器中把该文件拷贝过来使用. 2.安装Windows 2000时充分利用系统的内存 Windows 200

上网本安装Win7的技巧

众所周知Windows 7对电脑的硬件需求非常低,不仅远远低于vista系统,一些用户甚至发现安装Windows 7比Windows XP的硬件需求还要低.于是很多上网本用户也想把Windows 7安装到自己的机器上.实际上Windows 7的确也可以在配置很低的上网本流畅运行,不过一些上网本的用户却因为没有DVD光驱无法安装Windows 7系统而郁闷.其实,你大可不必沮丧,因为不用DVD光驱我们照样可以安装Windows 7系统,仅仅需要一个4GB大小的U盘,经过测试,使用U盘安装Windo