Builder и изменение ресурсов в программе - Visual Basic .NET
Формулировка задачи:
Вечер добрый!
Необходимо динамически записать в исполняемый файл определенный ресурс.
Реализую это средствами Bilder'а и Stub'а:
по сути получается что мы билдером склеиваем наш стаб и указанную программу, а затем, при запуске получившегося стаба, извлекаем эту программу и запускаем...
но возникла проблема - файл на выходе не рабочий...
весит на пару кб меньше, а при запуске выдает "неподдерживаемое 16-разрядное приложение. не удалось запустить программу из-за несовместимости с 64-разрядной версией Windows"
Может кто-нибудь из коллег поможет указать мне на ошибку в моих действиях?
Листинг программы
- Const Spliter As String = "(___Spliter___)"
- Dim Options() As String
- FileOpen(1, Application.ExecutablePath, OpenMode.Binary, OpenAccess.Read, OpenShare.Shared)
- Dim A As String = Space(LOF(1))
- FileGet(1, A) 'Читаем из себя
- FileClose(1)
- Options = Split(A, Spliter)
- Dim B() As Byte = System.Text.Encoding.Default.GetBytes(Options(1))
- IO.File.WriteAllBytes(Application.StartupPath & "\temp.exe", B)
- Process.Start(Application.StartupPath & "\temp.exe") Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Const Split As String = "(___Spliter___)"
- Dim Sfd As New SaveFileDialog
- Dim SaveFileName As String
- Sfd.Filter = "*.exe | *.exe"
- If Sfd.ShowDialog = Windows.Forms.DialogResult.OK Then SaveFileName = Sfd.FileName _
- Else Exit Sub
- Try
- FileOpen(1, Application.StartupPath & "\Stub.exe", OpenMode.Binary, _
- OpenAccess.Read, OpenShare.Default) 'Открываем Stub
- Dim Stub As String = Space(LOF(1))
- FileGet(1, Stub)
- FileClose(1)
- FileOpen(2, SaveFileName, OpenMode.Binary, OpenAccess.Write, OpenShare.Default)
- Dim A() As Byte = IO.File.ReadAllBytes("Programm.exe")
- Dim V As New System.Text.UTF8Encoding()
- Dim St As String = V.GetString(A)
- FilePut(2, Stub & Split & St)
- FileClose(2)
- MsgBox("Компиляция завершена!", MsgBoxStyle.Information, "Builder")
- Catch ex As Exception
- MsgBox("Ошибка при компиляции!" & vbNewLine & ex.ToString)
- End Try
- End Sub
Решение задачи: «Builder и изменение ресурсов в программе»
textual
Листинг программы
- Imports System.IO
- ...
- Dim destPath = Path.Combine(Application.StartupPath, "temp.exe")
- Using fsSrc As FileStream = File.OpenRead(Application.ExecutablePath)
- fsSrc.Seek(-8, SeekOrigin.End)
- Dim buf(7) As Byte
- fsSrc.Read(buf, 0, 8)
- fsSrc.Position = BitConverter.ToInt64(buf, 0)
- Using fsDest As New FileStream(destPath, FileMode.Create, FileAccess.Write)
- fsSrc.CopyTo(fsDest)
- fsDest.SetLength(fsDest.Length - 8)
- End Using
- End Using
- Process.Start(destPath)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д