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