可执行文件,特别是Windows应用程序,微软在Windows中引入了一个非常好但管理不方便的新东西──动态链接库DLL。这样开发出来的应用程序本身变小了,可相应辅佐运行的DLL文件变多了,而且在Windows中开发的程序,特别是用VB开发的程序往往要用到第三方控件OCX。这样,开发出来的程序就不容易管理,而且Windows应用程序一般都需要安装。而卸载往往又不彻底,常常会保留一些所谓的共享文件。安装一个、两个这样的程序倒无妨,安装多了Windows的系统文件夹就会急剧膨胀。绿软件就是在这种情况下诞生的,它的特点是程序不用安装,拷贝或解压到一个目录下就可以运行,卸载只要删除整个目录就OK了。
下面我们来谈谈怎样用VB 6.0编写一个绿软件。
首先,用VB编写好应用程序。需注意的是,一些用不着的第三方控件最好不要保留在工程中,这样开发出来的程序相对较小,并生成EXE文件。
其次,程序编好后,退出开发环境,启动VB 6.0中文版工具──Package & Deployment向导。用向导将应用程序打包。完成后用Winzip 8.0或其他能打开并能解压CAB文件的压缩工具打开安装目录下的SETUP.CAB,并解压到一个临时目录,删除和文件(特别注意Msvbvm60.dll和Asycfilt.dll必须带上,否则程序无法运行)。
再次,将应用程序本身要调用到的下级目录一起拷贝到这个临时目录中。如没有则跳过这一步。
最后,将这个临时目录中的文件整理一下。如果你认为这些文件大了些,你可以用ASPACK或其他一些可执行文件压缩工具将这个目录中的可执行文件、DLL文件、OCX文件压缩一下,用VB编写的程序一般经压缩后大小只有原来的30%。如果运行稳定就可以将BAK文件删除,不行则恢复到原来的面貌。
现在你可以将这个目录改成你所需的名字,打包就可以发行了。它能在没安装VB的机器中正常运行,怎么样,去Try一下吧,自己也来开发绿软件。
运行环境:Windows98、Visual Basic6.0 中文版(Visual Basic5.0原理基本相同)、Aspack (可选)。
之三:
现在非常流行“绿”软件,不需要什么安装程序只要一个 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\),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
类型: “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 & "\" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下)
Put #FileNum, , TempFile
Close #FileNum
注释:Shell "regsvr32 " & TempDir & "\ ", vbNormalFocus 注释:注册控件,有弹出对话框
Shell "regsvr32 " & TempDir & "\ /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
注释:补充:S 和 MAX_PATH 的值是可以随便赋的,
注释:如: Dim S As String * 20
注释: Length = GetSystemDirectory(S, 20)
3、补充说明
在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件)
4、程序运行
将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上
,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿”软件就完成了。
之四:
VB-PowerWrap v4.1 版(开发VB绿软件的好工具)
『软件简介』
VB-PowerWrap 允许开发者在发布他们的程序时不需要再加入一大堆
的 OCX 与 DLL 文件。该程序可以帮助 Visual Basic 程序员在发布他们
的可执行文件时不需要再担心关于其他链接库与 OCX 的问题了。VB-Powe
rWrap 允许你将程序所必需的所有 .dll 文件与 .ocx 文件打包到你的 V
B 程序内部,并且不需要用户安装,直接就可以运行。并且 VB-PowerWra
p 可以自动注册所必需的 .dll 与 .ocx 文件!
VB-PowerWrap 通过扫描一个 Visual Basic 的工程文件,并将该工
程所需要的文件进行打包,然后创建一个包含所有必要文件的可执行文件
供程序员发布。VB-PowerWrap 使用了超强的压缩模块,这样可以创建出
bak文件最小的 .exe 文件。
VB-PowerWrap 功能简介:
压缩所有的 DLL 与 OCX 文件
如果需要则在用户的机器上注册必要的控件
不会出现恼人的运行时问题
自动扫描工程所必需的 DLL 与 OCX 文件。
可以用于 Visual Basic 4、5、6 版本中。
下载地址:computer.baba8/download/HA_VB-PowerWrap.rar之五:Visual Basic中第三方控件使用之金蝉脱壳
在用VB编程中合理的使用第三方控件,往往能够事半功倍。但是使用第三方控件也有不好 的地方,那就是为了保证程序正常运行,必须使程序能够在系统目录或程序目录下到所 用的第三方控件。要做到这一点通常有两种办法:一是把控件和程序制成一个压缩包发 行,这样的缺点是有可能导致在程序传播过程中丢失控件文件。二是制作安装程序,缺点 是制作过程烦琐。而且上面两种办法也不符合绿软件的要求。所谓的绿软件是指软件 只有单个可执行文件且无须安装,目前很受用户欢迎。那么有没有办法在使用了第三方控 件的情况下实现绿软件梦呢?答案是有。
做法是,将第三方控件以自定义资源文件方式保存在程序中,程序运行之后使用控件之前 将所用到的控件生成到该程序目录下,完成控件从可执行文件中的金蝉脱壳。
具体做法如下:
第一步:将要用到的控件拷贝到当前工程目录下,右键单击该控件,选择属性,记下文件 大小。注意,应记下以字节为单位的具体数字,而不是多少K,以备编程使用。
第二步:引用并正常使用该控件。
第三步:新建资源文件加入工程,在资源文件编辑器中添加所使用的第三方控件为自定义 资源(CUSTOM),资源
号使用默认的101。如果使用了多个控件则分别添加到资源文件的 101、资源项中,脱壳代码也要作相应的修改。
第四步:编写控件脱壳代码,使其读取资源文件的数据,在程序当前目录下生成控件。
代码如下:
Private Const OCXSIZE = 57344 `欲生成的控件大小是57344Byte,名字为
Sub Main()
Dim Ocx() As Byte `OCX是个Btye类型的数组
Dim Counter As Long
Ocx = LoadResData(101, "CUSTOM") `将自定义资源中101号资源读入数组OCX
`注意,微软的帮助中对加载自定义资源的说明有错误,自定义资源标识为"CUSTOM"而不 是帮助所说的数字10
If Right(App.Path, 1) = "\" Then `读取程序所在路径,判断是否为根目录并分别处理
`程序在根目录下
If Dir(App.Path & "") = "" Then `程序路径下有无控件,无则生成控件
`以二进制方式写(生成)控件()到主程序所在的目录
Open App.Path & "" For Binary As #1
For Counter = 0 To OCXSIZE - 1 `注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
Put #1, , Ocx(Counter)
Next Counter
Close #1
End if
Else
`程序不在根目录下
If Dir(App.Path & "\") = "" Then `程序路径下有无控件,无则生成控件
`以二进制方式写(生成)控件()到主程序所在的目录
Open App.Path & "\" For Binary As #1
For Counter = 0 To OCXSIZE - 1 `注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
Put #1, , Ocx(Counter)
Next Counter
Close #1
End if
End if
Form1.Visible = True `主程序所用控件已经生成,显示主窗体,进入主程序。
End Sub
注意:将以上代码作为一个模块添加到工程中,并在工程-工程属性设置中将启动对象选 为Sub Main,即上面的脱壳代码。然后编译生成EXE文件,将该EXE文件拷贝到其他没有安 装所用控件的计算机上运行一下看看是否实现了控件携带之金蝉脱壳。如果是那么OK!以 上为使用一个控件的情况,使用多个控件方法基本相同,不在赘述。
以上摘自 瓜尔佳网摘
类别:vb&vba | 添加到搜藏 | 浏览(63) 网友评论: 发表评论:姓 名: *姓名最长为50字节
网
址或邮箱: (选填)
内 容:
验证码: 请输入下图中的四位验证码,字母不区分大小写。
看不清?
?2007
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论