将命令行参数传递给使用 DotNetZip 创建的 SFX

Posted

技术标签:

【中文标题】将命令行参数传递给使用 DotNetZip 创建的 SFX【英文标题】:Passing command line arguments to SFX created with DotNetZip 【发布时间】:2012-12-31 16:48:43 【问题描述】:

我使用带有以下选项的 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 时指定它们不是一个选项。

【问题讨论】:

【参考方案1】:

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

所示

我还发现了这个question,上面说WinRar可以做到这一点。

【讨论】:

【参考方案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

【讨论】:

以上是关于将命令行参数传递给使用 DotNetZip 创建的 SFX的主要内容,如果未能解决你的问题,请参考以下文章

将命令行参数传递给函数

如何将命令行参数传递给 WinForms 应用程序?

将命令行参数传递给 AWS Fargate 容器

将命令行参数传递给 emscripten 生成的应用程序

将命令行参数传递给 QPython

在 Eclipse(Pydev) 中将命令行参数传递给 Python 脚本