To tak nie zadziała, bo nie da się stworzyć pliku zapisując jego dane do pliku tekstowego, musisz działać binarnie.
Powiedzmy, że masz plike "c:\folder\plik.exe" to najprościeć zapisać go w base 64 do pliku textowego:
Kopiuj
Const TypeBinary = 1
Const ForReading = 1, ForWriting = 2, ForAppending = 8
plik="c:\folder\plik.exe"
Dim bytes
Dim B64String
With CreateObject("ADODB.Stream")
.Open
.Type = 1 'otwórz binarnie
.LoadFromFile plik
bytes = .Read
.Close
End With
B64String = EncodeBase64(bytes)
Set objFileToWrite = CreateObject("Scripting.FileSystemObject").CreateTextFile(plik & ".txt",true)
objFileToWrite.WriteLine(B64String )
objFileToWrite.Close
Set objFileToWrite = Nothing
Private Function EncodeBase64(bytes)
Set objXML = createobject("MSXML2.DOMDocument.6.0")
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = bytes
EncodeBase64 = objNode.Text
Set objNode = Nothing
Set objXML = Nothing
End Function
co spowoduje, ze powstanie plik: c:\folder\plik.exe.txt
i to jego zawartośc budujesz w pliku bat
a w samym bacie tworzysz skrypt który tą zawartość zapisze jako exe:
Kopiuj
plikb64 = "c:\folder\plik.exe.txt"
plikexe = "c:\folder\plik_test.exe"
Set fso= CreateObject("Scripting.Filesystemobject")
Set input = fso.OpenTextFile(plikb64)
contents = input.ReadAll()
input.Close
Set oXML = CreateObject("Msxml2.DOMDocument")
Set oNode = oXML.CreateElement("base64")
oNode.dataType = "bin.base64"
oNode.text = contents
Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = 1 'adTypeBinary
BinaryStream.Open
BinaryStream.Write oNode.nodeTypedValue
BinaryStream.SaveToFile plikexe