我知道我可以使用7z或winrar,但我想自己学习。
如何实现自解压归档?我可以使用C#或C++,但让我来解决这个问题。
当我打开exe时,我需要某种GUI来询问在哪里提取文件。一旦用户说可以,我显然应该提取它们。我已经在C#winforms中实现了一个简单的例子,但我的问题是如何将文件名和二进制文件转换为exe?
有一次我问,在exe的末尾添加额外的数据安全吗?答案表明,如果我只是在exe的末尾添加数据,它可能会被病毒扫描仪检测到。现在很容易将存档的长度写为最后4字节,并将数据附加到我的通用exe中,我相信我的进程可以读取我自己的exe,这样就可以工作了。但这感觉很糟糕,我不希望人们因为我使用了这种技术就指责我写病毒。实现这一点的正确方法是什么?
注意:我检查了自提取标记,很多问题是如何操作自提取,而不是如何实现。除了这个正在询问其他问题的自提取自检可执行
-编辑-我用7z做了两个自解压,并进行了比较。看起来。。。它是7z.sfx
文件,但附带了一个常规的7z档案。那么…这样做没有错吗?有更好的方法吗?我的目标是windows,可以使用C#编译器来提供帮助,但我不知道有多少额外的工作,或者在编程上有多困难,也许在exe的末尾添加数据还不错?
这是可能的。我曾经使用过以下技术,当时我们需要为应用程序分发更新,但计算机的配置使最终用户无权更改应用程序文件。更新应该登录到管理员帐户并更新所需的文件(所以我们遇到了相同的问题:如何将多个文件作为一个可执行文件分发)。
解决方案是C#中的文件资源。你所需要做的就是:
- 在C#项目中创建一个资源文件(以.resx结尾的文件)
- 添加类型为"file"的新资源。您可以轻松地将现有文件添加为
byte[]
资源 - 在程序中,您可以简单地将资源提取为文件:
System.IO.FileStream file = new System.IO.FileStream("C:\PathToFile",
System.IO.FileMode.OpenOrCreate);
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(file);
writer.Write(UpdateApplication.Data.DataValue, 0, UpdateApplication.Data.DataValue.Length);
(这里UpdateApplication.Data
表示二进制资源)。
我们的解决方案缺乏压缩,但我相信使用C#ZipLib这样的库可以很容易地实现这一点。
我希望这个解决方案是病毒扫描程序安全的,因为这个方法可以创建完整、有效的可执行文件。