3

我使用带有以下选项的 DotNetZip 创建了一个自解压 zip:

var opts = new SelfExtractorSaveOptions();
opts.RemoveUnpackedFilesAfterExecute = true;
opts.PostExtractCommandLine = "TestApp.exe";
opts.Flavor = SelfExtractorFlavor.ConsoleApplication;
zip1.SaveSelfExtractor("TestAppSFX.exe", opts);

是否可以将命令行参数传递给我的自解压 zip,然后将其传递给解压后调用的控制台应用程序?

即,我希望能够输入如下内容:

TestAppSFX.exe -flag

然后,我的控制台应用程序TestApp.exe-flag作为参数接收。

这些参数将根据使用情况而有所不同,因此在我创建 SFX 时指定它们不是一个选项。

4

2 回答 2

2

我查看了源代码,DotNetZip 似乎无法做到这一点。我现在使用 7zip 来执行此操作,如此处所示

我还发现了这个问题,它说 WinRar 可以做到这一点。

于 2013-01-01T06:28:25.553 回答
2

是的,您可以使用 DotNetZip 传递标志,但您需要做一些工作。

您需要下载源代码并修改 CommandLineSelfExtractorStub.cs 以接受您自己的自定义参数。完成后,您可以将其构建到新的存根 exe 中。

要构建你的 SFX,你会做这样的事情......

byte[] stub = GetStubExecutable(); //read in your new stub file
output.Write(stub, 0, stub.Length);

using (ZipFile zip = new ZipFile())
{
    String[] filenames = System.IO.Directory.GetFiles(Path.Combine(path,FilesFolder)); 
    // Add the rest of they files you'd like in your SFX
    foreach (String filename in filenames)
    {
        ZipEntry e = zip.AddFile(filename, OutputZipFolder);
    }

    zip.Save(output); // save the zip to the outputstream
}
于 2017-07-18T18:20:46.177 回答