Передача аргументов командной строки в SFX, созданный с помощью DotNetZip

Я создал самораспаковывающийся zip-архив с помощью 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 ответа

Решение

Я посмотрел на исходный код, и это не представляется возможным с DotNetZip. Я сейчас использую 7zip, чтобы сделать это, как указано здесь

Я также нашел этот вопрос, который говорит, что это возможно с WinRar.

Да, вы можете передавать флаги, используя 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
}
Другие вопросы по тегам