Я использую сценарий из этого ответа https://stackoverflow.com/a/1681410/22, чтобы вставить флажок запуска приложения в конце установщика MSI.
Все идет нормально, и я получаю флажок запуска очень хорошо, однакоприложение не запускается после завершения установки.
Не уверен, что это причина, но мое приложение требует администратора (app.manifest)
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Вывод сборки установщика:
------ Starting pre-build validation for project 'MyAppInstaller' ------
------ Pre-build validation for project 'MyAppInstaller' completed ------
------ Build started: Project: MyAppInstaller, Configuration: Release ------
Building file 'C:\path\to\MyAppInstaller.msi'...
Packaging file 'MyApp.exe'...
Packaging file 'Icon.ico'...
Starting post-build events...
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
Updating the Control table...
Updating the ControlEvent table...
Updating the CustomAction table...
Updating the Property table...
Done Adding Additional Store
Successfully signed: MyAppInstaller.msi
Редактировать:
Если щелкнуть правой кнопкой мыши проект установки в Visual Studio и выбрать «Установить».Приложение запускается при закрытии установщика.
Однако, если я просто дважды щелкну по сгенерированному MSI.Приложение не откроется после закрытия MSI.
Я также пытался изменить настраиваемое действие на это, но все равно получаю те же результаты:
sql = "INSERT INTO `CustomAction` (`Action`, `Type`, `Source`, `Target`) VALUES ('VSDCA_Launch', '226', 'TARGETDIR', '[TARGETDIR]\\MyApp.exe')";
Обновление:
В итоге я использовал слегка измененную версию ответа "DJ KRAZE".В моем методе Main я проверяю аргумент frominstaller, а затем просто запускаю приложение в новом процессе и завершаю работу.Что позволяет установщику продолжить работу в обычном режиме.Затем я добавляю exe в настраиваемое действие «Установить» с аргументом «/ frominstaller».
if (frominstaller)
{
Process p = new Process();
p.StartInfo.FileName = System.Reflection.Assembly.GetExecutingAssembly().Location;
p.Start();
Application.Exit();
}