将命令行参数传递给使用 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的主要内容,如果未能解决你的问题,请参考以下文章