В моем установщике Windows MSI у меня есть настраиваемое действие VBScript, которое извлекает некоторые файлы из «двоичной» таблицы в файловую систему. Это код, который я использую:
Function ExtractFromBinary(ByVal binaryName, ByVal binaryOutputFile)
Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
Const msiReadStreamInteger = 0
Const msiReadStreamBytes = 1
Const msiReadStreamAnsi = 2
Const msiReadStreamDirect = 3
Dim binaryView : Set binaryView = Session.Database.OpenView("SELECT Data FROM Binary WHERE Name = '" & binaryName & "'")
binaryView.Execute
Dim binaryRecord : Set binaryRecord = binaryView.Fetch
Dim binaryData : binaryData = binaryRecord.ReadStream(1, binaryRecord.DataSize(1), msiReadStreamAnsi)
Set binaryRecord = Nothing
Dim binaryStream : Set binaryStream = oFSO.CreateTextFile(binaryOutputFile, True, False)
binaryStream.Write binaryData
binaryStream.Close
Set binaryStream = Nothing
End Function
Это без проблем используется в производстве уже 2-3 года. Однако теперь у нас есть случай с японской установкой Windows, где извлеченные двоичные файлы повреждены:
Как видите, проблема обычно стоит после символа "?" где сценарий либо вставляет «E», либо перезаписывает следующий символ.
И метод ReadStream
, и метод CreateTextFile
имеют параметр, который влияет на кодирование. Показанная выше комбинация кажется единственной, которая работает на моей английской Windows 10.
Что мне нужно изменить в приведенном выше коде, чтобы он работал и в японской системе?
oFSO.CreateTextFile(binaryOutputFile, True, True)
на японской сборке? stackoverflow.com/a/47449590/4181058 - person Captain_Planet   schedule 27.07.2019