Хотя ответ, предложенный "Уильямом Леарой", является очень хорошим началом, я нашел лучшее решение здесь , о котором стоит упомянуть.
Еще одним преимуществом этого метода является то, что вы можете поместить свой пакетный файл в папку установки приложения, а не в корневую папку C, но мы используем специальные флаги, чтобы отложить выполнение после действия FileCopy , мы также используем noImpersonate , чтобы иметь более высокие привилегии, необходимые для запуска из Program Files
Несколько заметок:
- Используйте TARGETDIR вместо INSTALLDIR
- Обязательно указывайте пути.
Это мои два пользовательских действия. В моем случае я хочу заставить собственный командный процессор исправить несколько записей реестра, поэтому я не использую COMSPEC .
Первое действие (тип 50) выполняет команду в источнике с входными аргументами объекта Target, так как тип имеет значение 50 + 1024 + 2048, для него отложено действие с флагом noImpersonate .
- Действие: FinalAction
- Тип: 3122
- Источник: NCOM
- Цель: / c "[TARGETDIR] Fixup.bat"
Второе действие сразу определяет свойство NCOM :
- Действие: FinalNativeSys
- Тип: 51
- Источник: NCOM
- Цель: [WindowsFolder] System32 \ cmd.exe
Затем вы должны добавить эти действия в InstallExecuteSequence :
- Действие: FinalAction
- Состояние: НЕ установлено
- Последовательность: 5002
А вот этот:
- Действие: FinalNativeSys
- Состояние:
- Последовательность: 5001
Обратите внимание, что в моем случае я мог легко настроить действия для вызова reg.exe import Fixup.reg .
Наконец, можно использовать msitran , как предложено здесь в пост-сборке, для автоматизации процедуры.