现在非常流行“绿色”软件,不需要什么安装程序只要一个 exe 文件就可以运行程序了,而在 vb 的编程中有许多地方需要调用第三方的控件(很难用 api 函数搞定所有的功能),这就需要制做一个安装程序,把所需要的控件、dll 文件或其他文件打包进去了, 那么在 vb 中怎么用变通的方法实现“绿色”软件呢,请看示例:
1、主程序.exe
用 vb6.0 编写的程序,调用了 winsock 控件,如果在没有安装vb5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用vb5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。
2、注册程序.exe
用 vb6.0 编写的程序,使用资源文件的方法,把 winsock 控件封装到本程序中,在运行主程序.exe之前,先运行本程序,通过api函数getsystemdirectory取得系统的winddows\system的目录,然后把winsock控件复制到该目录下,并用shell来完成控件的注册。
⑴启动 vb6.0,在“外接程序→外接程序管理器”中加载“visual basic 6 资源编辑器”
⑵在 vb 资源编辑器窗口中,点击“添加自定义资料”,增加 winsock 控件(c:\winddows\system\nsck.ocx),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
类型: “ocx”
标识号: 101
语言: 中文(中国)
⑶保存资源文件,写如下代码:
option explicit
private declare function getsystemdirectory lib "kernel32" alias "getsystemdirectorya" (byval lpbuffer as string, byval nsize as long) as long
const max_path = 260 注释:定义足够长的字符串
private sub form_load()
dim tempfile() as byte
dim filenum as integer
dim tempdir as string
tempdir = getwinsysdir 注释:自定义函数取得系统的 winddows\system 的目录
tempfile = loadresdata(101, "ocx") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 byte 数组
filenum = freefile
open tempdir & "\nsck.ocx" for binary access write as #filenum 注释:新建文件(把 winsock 控件复制到指定目录下)
put #filenum, , tempfile
close #filenum
注释:shell "regsvr32 " & tempdir & "\nsck.ocx ", vbnormalfocus 注释:注册控件,有弹出对话框
shell "regsvr32 " & tempdir & "\nsck.ocx /s", vbnormalfocus 注释:注册控件,无弹出对话框
msgbox "注册成功,现在本程序可正常运行了!!", vbokonly, "注册控件"
unload me
end sub
public function getwinsysdir() 注释:定义读取winddows\system 的所在目录的函数
dim s as string, length as long
s = string(max_path, 0) 注释:赋值
length = getsystemdirectory(s, max_path) 注释:s为取得目录,max_path 为长度
s = left(s, instr(s, chr(0)) - 1) 注释:去掉多余的空格
getwinsysdir = s
end function
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器