[Assembly] Проблема с GetManifestResourceStream

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

NetBeginner
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 12.11.2012 (Пн) 9:04

[Assembly] Проблема с GetManifestResourceStream

Сообщение NetBeginner » 12.11.2012 (Пн) 9:15

Доброго всем дня
Прошу помощи с функцие GetManifestResourceStream

Описание:
Моя программа открывает .NET PE файл для извлечения видео ресурса, добавленого мною ранее
Все бы хорошо, вот только извлекаемы файл испорчен, хотя проверял несколько раз этот ресурс сторонним ПО (ResTuner итп.) и внутри EXE он корректен

Код функции записи в файл:
Код: Выделить всё
    Public Function WriteResource(ByVal filename As String, ByVal bytes As Byte()) As Boolean
        Try
            Dim handle As IntPtr = BeginUpdateResource(filename, False)
            Dim file1 As Byte() = bytes
            Dim fileptr As IntPtr = ToPtr(file1)
            Dim res As Boolean = UpdateResource(handle, "RT_RCDATA", "VIDEO", 0, fileptr, Convert.ToUInt32(file1.Length))
            EndUpdateResource(handle, False)
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function

Код функции извлечения из файла:
Код: Выделить всё
    Public Sub SaveToDisk(ByVal resourceName As String, ByVal fileName As String)
        Dim assy As [Assembly] = [Assembly].GetExecutingAssembly()
        For Each resource As String In assy.GetManifestResourceNames()
            If resource.ToLower().IndexOf(resourceName.ToLower) <> -1 Then
                Using resourceStream As System.IO.Stream = assy.GetManifestResourceStream(resource)
                    If resourceStream IsNot Nothing Then
                        Using reader As New BinaryReader(resourceStream)
                            Dim buffer() As Byte = reader.ReadBytes(CInt(resourceStream.Length))
                            Using outputStream As New FileStream(fileName, FileMode.Create)
                                Using writer As New BinaryWriter(outputStream)
                                    writer.Write(buffer)
                                End Using
                            End Using
                        End Using
                    End If
                End Using
                Exit For
            End If
        Next resource
    End Sub

Использование кода записи в файл:
Код: Выделить всё
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim buffer As Byte() = My.Computer.FileSystem.ReadAllBytes("с:\video.avi")
        WriteResource("c:\test_app.exe", buffer)
    End Sub

Использование кода извлечения из файла:
Код: Выделить всё
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        SaveToDisk("VIDEO", "c:\video2.avi")
    End Sub


В оригинале, видео файл весит 1Мб, в новом ресурсе он имеет то же значение, но после извлечения он уже больше 10Мб и испорчен
Подскажите пожалуйсто, как изменить функцию извлечения из файла, чтобы извлекаемый файл не портился
:oops:

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: [Assembly] Проблема с GetManifestResourceStream

Сообщение ark » 18.11.2012 (Вс) 9:35

А не пробовал из файла грузить, а не из памяти? Dim assy As [Assembly] = [Assembly].LoadFrom("c:\test_app.exe")


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 16

    TopList