Передача аргументов командной строки в 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 не вариант.


person jhewlett    schedule 31.12.2012    source источник


Ответы (2)


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

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

person jhewlett    schedule 01.01.2013

Да, вы можете передавать флаги с помощью DotNetZip, но вам нужно немного поработать.

Вам необходимо загрузить исходный код и изменить CommandLineSelfExtractorStub.cs, чтобы он принимал ваши собственные аргументы. Как только вы это сделаете, вы можете встроить его в новый исполняемый файл-заглушку.

Чтобы создать свой 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
}
person matt    schedule 18.07.2017