Запустите пакетный файл в фиксации установщика Windows.

StackOverflow https://stackoverflow.com/questions/998703

Вопрос

Мне не удалось изменить MSI установщика Windows для запуска командного файла после установки основного вывода.Я искал это и нашел много предложений, но ничего не помогло.

Добавить пользовательское действие
Пользовательские действия могут быть только исполняемыми файлами.Пакетный файл не является исполняемым.

Создайте исполняемый файл Windows Scripting Host, который запускает пакетный файл.
Многие люди пытались это сделать, в том числе и на ТАК, и никто не смог заставить это работать.

Используйте WIX или InstallShield
У меня нет ни времени, ни полномочий менять технологию установки компании.

Отредактируйте .msi с помощью Orca и добавьте настраиваемое свойство, затем настраиваемое действие, затем отредактируйте InstallExecuteSequence,...
Я пробовал это часами и создавал только установщики, которые выдавали системную ошибку при их запуске.
Это было полезно?

Решение

То, что вы сказали выше, неверно:

Пользовательские действия могут быть только исполняемыми файлами.Пакетный файл не является исполняемым.

Пользовательские действия (даже без таких инструментов, как InstallShield) могут быть основаны на файлах .EXE, VBScript, JScript или DLL.Если вы пишете DLL, вы можете написать любой код, который хотите вызвать в пакетном файле, или внести любые изменения в систему — ограничений нет.

Обновлять:пример, который сработал для меня:(запись в таблице CustomAction)

Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>

Другие советы

Мне удалось решить эту проблему, создав EXE-файл, состоящий по существу из:

System.Diagnostics.Process.Start(pathToBatchFile);

Добавление EXE-файла в файл MSI и его запуск в качестве специального действия.

Хотя ответ, предложенный «Уильямом Лирой», является очень хорошим началом, я нашел лучшее решение. здесь Стоит отметить.

Еще одним преимуществом этого метода является то, что вы можете поместить командный файл в папку установки приложения, а не в корневую папку C, но мы используем специальные флаги, чтобы отложить выполнение до следующего момента. ФайлКопировать действие, мы также используем нетИмитировать чтобы иметь более высокие привилегии, необходимые для запуска из Программные файлы

Несколько примечаний:

  1. Использовать ЦЕЛЕВОЙ ДИАПАЗОН вместо ИНСТАЛЛДИР
  2. Обязательно укажите пути.

Это два моих дополнительных действия.В моем случае я хочу заставить родной командный процессор, чтобы исправить несколько записей реестра, поэтому я не использую КОМСПЕК.

Первое действие (тип 50) выполняет команду в источнике с входными аргументами цели, поскольку тип равен 50+1024+2048, поэтому это отложенное действие с нетИмитировать флаг.

  • Действие: Финальное действие
  • Тип: 3122
  • Источник: СНКОМ
  • Цель: /c "[TARGETDIR]Fixup.bat"

Второе действие определяет СНКОМ имущество немедленно:

  • Действие: Финалнативисис
  • Тип: 51
  • Источник: СНКОМ
  • Цель: [WindowsFolder]System32\cmd.exe

Затем вам следует добавить эти действия в УстановитьВыполнитьПоследовательность:

  • Действие: Финальное действие
  • Состояние: Не установлен
  • Последовательность: 5002

И этот:

  • Действие: Финалнативисис
  • Состояние:
  • Последовательность: 5001

Обратите внимание, что в моем случае я мог бы легко настроить действия для вызова reg.exe импорт Fixup.reg слишком.Наконец, можно использовать мситран как предложено здесь в пост-сборке для автоматизации процедуры.

Создайте EXE-файл, который создаст временный файл .bat для перехода в любой каталог, который вы хотите, и CALL еще один bat-файл, который делает то, что вам нужно.

Укажите пользовательскому действию использовать этот exe.

Первый аргумент exe-файла CPP — это путь к самому exe-файлу.Это можно использовать для ориентации, и эту информацию можно использовать при создании временного файла .bat.

В моем случае я добавил «Пользовательские действия».
В папке «Установить» выберите «Добавить дополнительное действие».
Выберите cmd.exe (c:\windows\system32\cmd.exe).
Затем в свойствах cmd.exe отредактируйте «Аргументы» на
"/Install /c C:\myApp.exe --exec-some-action"

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top