Builder и изменение ресурсов в программе - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Вечер добрый! Необходимо динамически записать в исполняемый файл определенный ресурс. Реализую это средствами Bilder'а и Stub'а:
Листинг программы
  1. Const Spliter As String = "(___Spliter___)"
  2. Dim Options() As String
  3. FileOpen(1, Application.ExecutablePath, OpenMode.Binary, OpenAccess.Read, OpenShare.Shared)
  4. Dim A As String = Space(LOF(1))
  5. FileGet(1, A) 'Читаем из себя
  6. FileClose(1)
  7. Options = Split(A, Spliter)
  8. Dim B() As Byte = System.Text.Encoding.Default.GetBytes(Options(1))
  9. IO.File.WriteAllBytes(Application.StartupPath & "\temp.exe", B)
  10. Process.Start(Application.StartupPath & "\temp.exe") Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  11. Const Split As String = "(___Spliter___)"
  12. Dim Sfd As New SaveFileDialog
  13. Dim SaveFileName As String
  14. Sfd.Filter = "*.exe | *.exe"
  15. If Sfd.ShowDialog = Windows.Forms.DialogResult.OK Then SaveFileName = Sfd.FileName _
  16. Else Exit Sub
  17. Try
  18. FileOpen(1, Application.StartupPath & "\Stub.exe", OpenMode.Binary, _
  19. OpenAccess.Read, OpenShare.Default) 'Открываем Stub
  20. Dim Stub As String = Space(LOF(1))
  21. FileGet(1, Stub)
  22. FileClose(1)
  23. FileOpen(2, SaveFileName, OpenMode.Binary, OpenAccess.Write, OpenShare.Default)
  24. Dim A() As Byte = IO.File.ReadAllBytes("Programm.exe")
  25. Dim V As New System.Text.UTF8Encoding()
  26. Dim St As String = V.GetString(A)
  27. FilePut(2, Stub & Split & St)
  28. FileClose(2)
  29. MsgBox("Компиляция завершена!", MsgBoxStyle.Information, "Builder")
  30. Catch ex As Exception
  31. MsgBox("Ошибка при компиляции!" & vbNewLine & ex.ToString)
  32. End Try
  33. End Sub
по сути получается что мы билдером склеиваем наш стаб и указанную программу, а затем, при запуске получившегося стаба, извлекаем эту программу и запускаем... но возникла проблема - файл на выходе не рабочий... весит на пару кб меньше, а при запуске выдает "неподдерживаемое 16-разрядное приложение. не удалось запустить программу из-за несовместимости с 64-разрядной версией Windows" Может кто-нибудь из коллег поможет указать мне на ошибку в моих действиях?

Решение задачи: «Builder и изменение ресурсов в программе»

textual
Листинг программы
  1. Imports System.IO
  2. ...
  3. Dim destPath = Path.Combine(Application.StartupPath, "temp.exe")
  4. Using fsSrc As FileStream = File.OpenRead(Application.ExecutablePath)
  5.     fsSrc.Seek(-8, SeekOrigin.End)
  6.     Dim buf(7) As Byte
  7.     fsSrc.Read(buf, 0, 8)
  8.     fsSrc.Position = BitConverter.ToInt64(buf, 0)
  9.  
  10.     Using fsDest As New FileStream(destPath, FileMode.Create, FileAccess.Write)
  11.         fsSrc.CopyTo(fsDest)
  12.         fsDest.SetLength(fsDest.Length - 8)
  13.     End Using
  14. End Using
  15.  
  16. Process.Start(destPath)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы