Могу ли я запустить команду до setup.msi? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть настольное приложение, и его установщик создает два файла в папке Release: назовем их setup.exe и setup.msi.

В событии после сборки я подписываю setup.msiс самозаверяющим сертификатом.Затем мой последний пакет установки состоит из трех этапов

  1. Добавление сертификата хранилища пользователя с start.cmd (или start.exe)
  2. Запуск setup.exe.Обратите внимание, что важно то, что он показывает управление учетной записью пользователя для проверенного автора с моими именем и фамилией.
  3. Удаление (с stop.cmd или stop.exe) сертификата впункт 1 по соображениям безопасности / передовым методам, так как он самоподписан

Теперь я полностью согласен с этим решением, я только хотел включить команды 1 и 3 в setup.exe, если это быловозможно стандартным способом.

Я пытался определить start.exe и stop.exe как пользовательские действия.В этом случае у меня есть только два файла setup.exe и setup.msi, но, к сожалению, я получаю неизвестный издатель.Я предполагаю, что это очевидно, потому что пользовательские действия идут внутри .msi, а не в setup.exe.Но я не эксперт по проектам инсталляторов, поэтому кто-то может предложить лучшее и стандартное решение.

Альтернативный подход

Это то, что я мог бы сделать гораздо прощепереключившись на Inno Setup и, возможно, как предложено в этом комментарии ?

Ссылки

1 Ответ

0 голосов
/ 26 сентября 2019

Обновленный ответ

Извините, я проверил мой оригинальный ответ ниже, и он "неправильный" в некотором смысле:

на самом деле я получаю установщик одним щелчком, но затем операционная система Windowsпредвосхищает контроль над учетной записью пользователя перед установкой в ​​один клик и показывает неизвестного издателя, который побеждает цель пункта 1 (и 3).

Итак, короткий обновленный ответ: невозможно (*) сделатьчто в стандартном исполняемом файле одним щелчком, как те, которые создаются модулем SFX, упоминается ниже.

( Примечание *): хотя это выполнимо путем компиляции пользовательского кода C # и добавленияфайлы в Resources.resx, например _7zr.exe и т. д., как в этом примере:

using System.IO;
using System.Diagnostics;
namespace selfextractinstaller
{
    class Program
    {
        static void Main(string[] args)
        {
            string file_path_7zr = @"_7zr.exe";
            using (FileStream fs = new FileStream(file_path_7zr, FileMode.Create))
            {
                byte[] pgm_bytes = Properties.Resources._7zr;
                fs.Write(pgm_bytes, 0, (int)pgm_bytes.Length);
            }
            string file_path_config = @"config.txt";
            using (StreamWriter sw = new StreamWriter(file_path_config, false))
            {
                sw.Write(Properties.Resources.config);
            }
            string file_path_7zSD = @"_7zSD.sfx";
            using (FileStream fs = new FileStream(file_path_7zSD, FileMode.Create))
            {
                byte[] pgm_bytes = Properties.Resources._7zSD;
                fs.Write(pgm_bytes, 0, (int)pgm_bytes.Length);
            }
            Process.Start(file_path_7zr, "b");
        }
    }
}

Подобный код может фактически использоваться в качестве самораспаковывающегося установщика, который не повышен и не требует UAC !

Дополнительные показания

Оригинальный ответ

В отсутствие других ответов я перейду к SFX-модулю для установщиков , упаковав все три .exe в точках 1-3 (плюс install_all.bat, запускающий их последовательно) в самораспаковывающийся установщик, который автоматически извлечет все необходимые файлы (включая сертификат) и, наконец, запустит install_all.bat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...