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

时间:2012-12-31 16:48:43

标签: c# dotnetzip sfx

我使用DotNetZip创建了一个自解压缩文件,其中包含以下选项:

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时指定它们不是一种选择。

2 个答案:

答案 0 :(得分:2)

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

所示

我还发现了这个question,它说WinRar可以实现这一点。

答案 1 :(得分: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
}