运行自我提取exe后,提取c# - DotNetZip

本文关键字:提取 DotNetZip 自我 exe 运行 | 更新日期: 2023-09-27 18:10:06

我正在尝试创建一个自提取exe。创建它不是问题。我面临的问题是

  • 设置exe存在的提取路径
  • 运行解压后的exe.

对于第二部分,很可能我必须有正确的提取路径。我使用以下修改后的代码从dotnetzipllibrary

zip.AddDirectory(DirectoryPath, "putty.exe");
zip.Comment = "This will be embedded into a self-extracting console-based exe";
SelfExtractorSaveOptions options = new SelfExtractorSaveOptions();
options.Flavor = SelfExtractorFlavor.ConsoleApplication;
options.DefaultExtractDirectory = "";
options.PostExtractCommandLine = "..''putty.exe";
options.RemoveUnpackedFilesAfterExecute = true;
zip.SaveSelfExtractor("archive.exe", options);

运行自我提取exe后,提取c# - DotNetZip

我看到两个问题。

首先,您正在呼叫

zip.AddDirectory(DirectoryPath, "putty.exe");

AddDirectory()方法将一个目录添加到zip存档中。接受2个输入的重载(您正在使用的那个)使用第二个参数命名zip存档中的目录。因此,在执行此调用之后,您将在zip归档文件中拥有所有可以在文件系统的DirectoryPath中找到的文件。zip文件的根目录名为"putty.exe"。对于目录来说,这至少是一个令人困惑的名称。我想你可能不是有意的。

如果你想添加一个文件到存档,使用AddFile(),而不是AddDirectory()。


第二,根据文档,执行post-extract命令

…使用提取目录作为进程的工作目录,…

所以如果你的压缩包在根目录下有一个名为"putty.exe"的文件,那么你想要运行的命令可能是"putty.exe",而不是"..'putty.exe"。


我建议在开发过程中,取出保存到自提取器的部分,并将其替换为保存到常规zip文件。检查您生成的zip文件,以确保它看起来像您想要的那样。当你做对了,把SaveSelfExtractor()部分放回去,你就会有一个合适的SFX。