原文鏈接:利用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
語言: 中文(中國)
?、潜4尜Y源文件,寫如下代碼:
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 Aclearcase/" target="_blank" >ccess 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
注釋:補充: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,就不會有任何的錯誤了,一個變通的“綠色”軟件就完成了。