提取后运行自解压exe C# - DotNetZip

时间:2011-09-29 12:11:44

标签: c# exe dotnetzip self-extracting

我正在尝试创建一个自解压exe。创建它没有问题。我遇到问题的地方是

  • 设置exe存在的提取路径
  • 运行解压缩的exe。

对于第二部分,我最有可能必须使提取路径正确。 我使用的是DotNetZipLibrary

中的以下修改代码
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);

1 个答案:

答案 0 :(得分:4)

我看到两个问题。

首先,您正在致电

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

AddDirectory()方法将目录添加到zip存档中。接受2个输入的重载(正在使用的输入)使用第二个参数命名zip存档中的目录。因此,在进行此调用之后,您将在zip存档中获得可在文件系统DirectoryPath中找到的所有文件。 zip存档中使用的根目录名称将为“putty.exe”。这至少是一个令人困惑的目录名称。我想你可能不打算这样做。

如果要将文件添加到存档,请使用AddFile(),而不是AddDirectory()。


其次,根据the documentation,运行后提取命令

  

...使用extract目录作为进程的工作目录,...

因此,如果您的zip在存档的根目录中有一个名为“putty.exe”的文件,那么您要运行的命令可能是“putty.exe”,而不是“.. \ putty.exe”。


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