Запустите самораспаковывающийся EXE после извлечения C # - DotNetZip - PullRequest
0 голосов
/ 29 сентября 2011

Я пытаюсь создать самораспаковывающийся exe.Создание это не проблема.Где я сталкиваюсь с проблемами, это

  • Установка пути извлечения, где существует exe
  • Запуск извлеченного exe.

Для второй части этонаиболее вероятно, что у меня должен быть правильный путь извлечения.Я использую следующий модифицированный код из DotNetZipLibrary

zip.AddDirectory(DirectoryPath, "putty.exe");
zip.Comment = "This will be embedded into a self-extracting console-based exe";
SelfExtractorSaveOptions options = new SelfExtractorSaveOptions();
options.Flavor = SelfExtractorFlavor.ConsoleApplication;
options.DefaultExtractDirectory = "";
options.PostExtractCommandLine = "..\\putty.exe";
options.RemoveUnpackedFilesAfterExecute = true;
zip.SaveSelfExtractor("archive.exe", options);

1 Ответ

4 голосов
/ 04 октября 2011

Я вижу две проблемы.

Во-первых, вы звоните

zip.AddDirectory(DirectoryPath, "putty.exe");

Метод AddDirectory () добавляет каталог в zip-архив.Перегрузка, которая принимает 2 входа, тот, который вы используете, именует этот каталог в zip-архиве вторым аргументом.Поэтому после совершения этого звонка вы будете иметь в zip-архиве все файлы, которые можно найти в DirectoryPath в вашей файловой системе.Имя корневого каталога, используемого в zip-архиве, будет «putty.exe».Это как минимум запутанное имя для каталога.Я думаю, что вы, вероятно, не намерены этого.

Если вы хотите добавить файл в архив, используйте AddFile (), а не AddDirectory ().


Во-вторых, согласно документации , команда post-extract запускается

... с использованием каталога извлечения в качестве рабочего каталога дляпроцесс, ...

Так что если в вашем zip-файле есть файл с именем "putty.exe" в корне архива, то команда, которую вы хотите выполнить, это, вероятно, "putty.exe",не ".. \ putty.exe".


Я предлагаю во время разработки вынуть часть, которая сохраняется в самораспаковывающийся файл, и заменить ее сохранением в обычный zip-файл.Изучите созданный вами zip-файл, чтобы убедиться, что он выглядит так, как вы хотите.Когда вы все сделаете правильно, верните часть SaveSelfExtractor () обратно, и вы получите правильный SFX.

...