c#在内存中解压缩.exe文件

本文关键字:exe 文件 解压缩 内存 | 更新日期: 2023-09-27 18:03:49

经过一番研究(大约1天),我意识到我需要一些帮助。

我要解决的问题:

我正在尝试解压缩.exe文件,但我无法将结果写入磁盘(这是一个约束)。

我需要在内存中保持这一个,例如在Stream类甚至字符串类。

来完成我的问题:

  • 我不知道是用哪个工具生成的
  • 。. Net Framework 4.5

我尝试了什么:

  • 我使用Process类,但有一个验证步骤,我想在后台做

  • 我尝试探索GZip/ZipFile类,但这是一个失败

谢谢你的回答

c#在内存中解压缩.exe文件

如果您可以在。net Framework 4.5或更高版本上构建,请使用System.IO.Compression中的类(请记住在项目级别添加对System.IO.CompressionSystem.IO.Compression.FileSystem的引用):

using System.IO.Compression;
using System.IO;
public static string GetTextfileFromZip(string zipFilepath, string txtFilename)
{
    using (ZipArchive zipArchive = ZipFile.Open(zipFilepath, ZipArchiveMode.Read))
    {
        ZipArchiveEntry entry = GetZipArchiveEntry(zipArchive, txtFilename);
        using (Stream stream = entry.Open())
        {
            using (StreamReader reader = new StreamReader(stream))
            {
                return reader.ReadToEnd();
            }
        }
    }
}
public static ZipArchiveEntry GetZipArchiveEntry(ZipArchive zipArchive, string zipEntryName)
{
    return zipArchive.Entries.First<ZipArchiveEntry>(n => n.FullName.Equals(zipEntryName));
}

注意:如果你的存档是一个自解压存档与。exe扩展名,这仍然会工作。只需将exe的完整路径传递给函数。第二个参数是存档中文本文件的名称/路径。因此,如果文本文件在存档根目录下,它将只是例如。"file.txt",否则,如果它位于名为sub的文件夹中,则参数应为@"sub'file.txt"

这是更简单的方法

using System;
using System.IO.Compression;
namespace zipReader
{
    class Program
    {
        static void Main(string[] args)
        {
            ZipFile.ExtractToDirectory("C:''Temp''D20190827.exe", "C:''Temp''");
            Console.WriteLine("Extract Done!");
        }       
    }
}