從程序中生成Exe文件
這篇文章要討論的是在一個VB程序中如何產(chǎn)生出另一個Exe文件。
要實現(xiàn)這個目的,必須符合以下幾個條件:
第一、編寫這樣的程序時,具備欲生成的Exe文件
第二、事先知道欲生成的Exe文件大小
其實這兩個條件可以說不是條件,但確實很重要。
為了敘說方便,將發(fā)行的程序稱作APP-1.Exe,要生成的文件叫APP-2.Exe,以下是具體步驟:
第一步,準(zhǔn)備好APP-2.Exe,這里我使用VB寫了一個什么都不做程序,編譯成APP-2.Exe。
第二步,右鍵單擊單擊APP-2.Exe,選擇屬性,記下文件大小。注意,應(yīng)記下以字節(jié)為單位的具體數(shù)字,而不是多少k。
這樣就具備了前邊說的兩個條件。
第三步,新建工程APP1,新建資源文件加入工程,在資源文件編輯器中添加自定義資源(CUSTOM),資源號使用默認(rèn)的101。值得注意的是,每個資源號對應(yīng)的資源項對資源大小的要求是有限制的,我記得時64K,因此如果APP-2.Exe的大小如果大于這個數(shù)的話,就要麻煩一些。如果是這樣,我們的寫另一個程序,把APP-2.Exe一個字節(jié)一個字節(jié)的讀出來,每64K生成一個文件,然后再把這些文件分別寫道資源文件的101、102......資源項中,代碼也要作相應(yīng)的修改。
第四步,為APP-1.Exe編寫代碼,使其讀取資源文件的數(shù)據(jù),生成APP-1.Exe。
代碼如下:
Private Const FILESIZEOFAPP2 = 20480 ´我生成的APP-2.Exe大小是20480Byte
Private Sub cmdOK_Click() ´單擊按鈕cmdOK運行代碼
Dim APP2() As Byte ´APP2是個Btye類型和數(shù)組
Dim Counter As Long
APP2 = LoadResData(101, "CUSTOM") ´將自定義資源中101號資源讀入數(shù)組
´注意,微軟的幫助中對加載定義資源的說明有誤,硬是資源標(biāo)識為"CUSTOM"而非數(shù)字
If Dir(App.Path & "\APP-2.Exe") <> "" Then ´第一次按cmdOK有效
MsgBox App.Path & "\APP-2.Exe 已經(jīng)存在!"
Exit Sub
End If
Open App.Path & "\APP-2.exe" For Binary As #1 ´以二進(jìn)制方式寫(生成)APP-2.Exe到APP-1.Exe所在的目錄
For Counter = 0 To FILESIZEOFAPP2 - 1 ´注意因為從0 Byte開始因此以文件大小 - 1Byte 為終
Put #1, , APP2(Counter)
Next Counter
Close #1
Shell App.Path & "\APP-2.Exe", vbNormalFocus ´運行剛生成的APP-2.Exe
Unload Me
End Sub
這篇文章要討論的是在一個VB程序中如何產(chǎn)生出另一個Exe文件。
要實現(xiàn)這個目的,必須符合以下幾個條件:
第一、編寫這樣的程序時,具備欲生成的Exe文件
第二、事先知道欲生成的Exe文件大小
其實這兩個條件可以說不是條件,但確實很重要。
為了敘說方便,將發(fā)行的程序稱作APP-1.Exe,要生成的文件叫APP-2.Exe,以下是具體步驟:
第一步,準(zhǔn)備好APP-2.Exe,這里我使用VB寫了一個什么都不做程序,編譯成APP-2.Exe。
第二步,右鍵單擊單擊APP-2.Exe,選擇屬性,記下文件大小。注意,應(yīng)記下以字節(jié)為單位的具體數(shù)字,而不是多少k。
這樣就具備了前邊說的兩個條件。
第三步,新建工程APP1,新建資源文件加入工程,在資源文件編輯器中添加自定義資源(CUSTOM),資源號使用默認(rèn)的101。值得注意的是,每個資源號對應(yīng)的資源項對資源大小的要求是有限制的,我記得時64K,因此如果APP-2.Exe的大小如果大于這個數(shù)的話,就要麻煩一些。如果是這樣,我們的寫另一個程序,把APP-2.Exe一個字節(jié)一個字節(jié)的讀出來,每64K生成一個文件,然后再把這些文件分別寫道資源文件的101、102......資源項中,代碼也要作相應(yīng)的修改。
第四步,為APP-1.Exe編寫代碼,使其讀取資源文件的數(shù)據(jù),生成APP-1.Exe。
代碼如下:
Private Const FILESIZEOFAPP2 = 20480 ´我生成的APP-2.Exe大小是20480Byte
Private Sub cmdOK_Click() ´單擊按鈕cmdOK運行代碼
Dim APP2() As Byte ´APP2是個Btye類型和數(shù)組
Dim Counter As Long
APP2 = LoadResData(101, "CUSTOM") ´將自定義資源中101號資源讀入數(shù)組
´注意,微軟的幫助中對加載定義資源的說明有誤,硬是資源標(biāo)識為"CUSTOM"而非數(shù)字
If Dir(App.Path & "\APP-2.Exe") <> "" Then ´第一次按cmdOK有效
MsgBox App.Path & "\APP-2.Exe 已經(jīng)存在!"
Exit Sub
End If
Open App.Path & "\APP-2.exe" For Binary As #1 ´以二進(jìn)制方式寫(生成)APP-2.Exe到APP-1.Exe所在的目錄
For Counter = 0 To FILESIZEOFAPP2 - 1 ´注意因為從0 Byte開始因此以文件大小 - 1Byte 為終
Put #1, , APP2(Counter)
Next Counter
Close #1
Shell App.Path & "\APP-2.Exe", vbNormalFocus ´運行剛生成的APP-2.Exe
Unload Me
End Sub