Передача аргументов командной строки в 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, но вам нужно немного поработать.
Вам необходимо скачать исходный код и изменить 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
}