0

我正在尝试创建一个自解压 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);
4

1 回答 1

4

我看到两个问题。

首先,你在打电话

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

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

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


二、根据文档,运行后解压命令

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

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


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

于 2011-10-04T15:30:55.177 回答