vbnet打包Word格式.docx
《vbnet打包Word格式.docx》由会员分享,可在线阅读,更多相关《vbnet打包Word格式.docx(9页珍藏版)》请在冰点文库上搜索。
在“添加新项”对话框中选择“安装程序类”。
6.
7.
详细代码附后。
四).创建自定义安装对话框
在解决方案资源管理器中选择“setup1”项目。
在“视图”菜单上指向“编辑器”,然后选择“用户界面”。
在用户界面编辑器中,选择“安装”下的“启动”节点。
在“操作”菜单上,选择“添加对话框”。
在“添加对话框”对话框中,选择“许可协议”对话框,然后单击“确定”关闭对话框。
在“添加对话框”对话框中,选择“文本框(A)”对话框,然后单击“确定”关闭对话框。
在“操作”菜单上,选择“上移”。
重复此步骤,直到“文本框(A)”对话框位于“安装文件夹”节点之上。
在“属性”窗口中,选择BannerText属性并键入:
安装数据库.
选择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
五).创建自定义操作
在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。
在自定义操作编辑器中选择“安装”节点。
在“操作”菜单上,选择“添加自定义操作”。
在“选择项目中的项”对话框中,双击“应用程序文件夹”。
选择“主输出来自installDB(活动)”项,然后单击“确定”关闭对话框。
在“属性”窗口中,选择CustomActionData属性并键入“/dbname=[CUSTOMTEXTA1]/server=[CUSTOMTEXTA2]/user=[CUSTOMTEXTA3]/pwd=[CUSTOMTEXTA4]/targetdir="
[TARGETDIR]\"
”。
附:
/targetdir="
是安装后的目标路径,为了在installDB类中获得安装后的路径,我们设置此参数。
六).添加文件
将SQLServer备份成文件DB.dat添加到“setup1”项目(在企业管理器中右击数据库->
所有工作->
备份数据库,备份成一个文件,取名为DB.dat)
将安装文件LisenceFile.rtf添加到“setup1”项目
在用户界面编辑器中,选择许可协议,设置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
<
RunInstaller(True)>
PublicClassInstaller1
InheritsSystem.Configuration.Install.Installer
#Region"
组件设计器生成的代码"
PublicSubNew()
MyBase.New()
该调用是组件设计器所必需的。
InitializeComponent()
在InitializeComponent()调用之后添加任何初始化
Installer重写dispose以清理组件列表。
ProtectedOverloadsOverridesSubDispose(ByValdisposingAsBoolean)
IfdisposingThen
IfNot(componentsIsNothing)Then
components.Dispose()
MyBase.Dispose(disposing)
组件设计器所必需的
PrivatecomponentsAsSystem.ComponentModel.IContainer
注意:
以下过程是组件设计器所必需的
可以使用组件设计器来修改此过程。
不要使用代码编辑器来修改它。
<
System.Diagnostics.DebuggerStepThrough()>
PrivateSubInitializeComponent()
components=NewSystem.ComponentModel.Container
#EndRegion
PublicOverridesSubInstall(ByValstateSaverAsSystem.Collections.IDictionary)
MyBase.Install(stateSaver)
IfNotInstallDB()Then
失败,反安装
Me.Uninstall(stateSaver)
ExitSub
DeleteFile(String.Format("
{0}DB.dat"
Me.Context.Parameters.Item("
targetdir"
)))
PublicOverridesSubUninstall(ByValstateSaverAsSystem.Collections.IDictionary)
执行反安装
MyBase.Uninstall(stateSaver)
PrivateSubDeleteFile(ByValpathsAsString)
删除指定的文件
Try
DimdelFileAsNewSystem.IO.FileInfo(paths)
IfdelFile.ExistsThen
delFile.Delete()
CatchexAsException
EndTry
PrivateSubCreateSql(ByValpathsAsString)
DimFileAsSystem.IO.StreamWriter
DimdbAsString=String.Format("
{0}"
dbname"
))
DimpathAsString=String.Format("
DimsAsNewSystem.Text.StringBuilder
s.Append("
usemaster"
&
vbCrLf)
"
ifnotexists(select*fromsysdatabaseswherename='
db&
"
)"
createdatabase"
ifexists(select*fromsysdeviceswherename='
DBdisk'
EXECsp_dropdevice'
Else"
EXECsp_addumpdevice'
disk'
'
'
path&
DB.dat'
restoredatabase"
fromdisk='
withreplace"
File=NewSystem.IO.StreamWriter(paths)
File.Write(s.ToString)
Finally
File.Close()
PrivateFunctionInstallDB()AsBoolean
安装数据库,调用自动批处理。
创建临时脚本
CreateSql(String.Format("
{0}Mydb2000tp.sql"
调用osql执行脚本
DimsqlProcessAsNewSystem.Diagnostics.Process
sqlProcess.StartInfo.FileName="
osql.exe"
sqlProcess.StartInfo.Arguments=String.Format("
-U"
-P"
{1}"
-S"
{2}"
-i"
{3}Mydb2000tp.sql"
user"
),Me.Context.Parameters.Item("
pwd"
server"
sqlProcess.StartInfo.WindowStyle=ProcessWindowStyle.Hidden
sqlProcess.Start()
sqlProcess.WaitForExit()'
等待执行
sqlProcess.Close()
删除脚本文件
ReturnTrue
ReturnFalse
EndFunction
EndClass