С помощью Wix, как я могу запустить сервис после создания базы данных? - PullRequest
0 голосов
/ 01 февраля 2020

У нас есть установщик wix, при новой установке требуется создать нашу базу данных и запустить наш сервис после ее создания. Поскольку службы запускаются задолго до InstallFinalize, служба не запускается, поскольку база данных не была создана. Я пытался использовать InstallFiles для запуска создания базы данных, но приложение создания базы данных так и не запустилось.

Далее я перешел к s c .exe, запустите «Мой сервер», как указано здесь и отложенное действие , и это не сработало.

Я удалил пользовательское действие для запуска службы и попытался ScheduleReboot , который не побуждал пользователя к перезагрузке и вынудил меня перезагрузить компьютер, чтобы иметь возможность удалить.

Как мне либо запланировать запуск службы после создания базы данных, либо принудительно выполнить перезагрузку, которая предложит пользователю перезагрузить систему, чтобы изменения вступили в силу?

<InstallExecuteSequence>
   <ScheduleReboot After='InstallFinalize'>NOT Installed AND NOT 
             WIX_UPGRADE_DETECTED</ScheduleReboot>

</InstallExecuteSequence>

Service Controller

<Component Id="ServiceComponent" Directory="BIN_FOLDER"  MultiInstance="yes"
         Guid="{04EAB7AF-2DC5-4807-85D7-BA9CDE65FD82}" >

<File Id="ServerExe" KeyPath="yes" Vital="yes" Source="$(var.BinFilesSourcePath)\MyServer.exe" />


    <ServiceInstall
      Id="ServiceInstaller"
      Name="My Server"
      DisplayName="My Server"
      Type="ownProcess"
      Start="auto"
      ErrorControl="normal"
      Description="My Server"
      Account="NT AUTHORITY\LocalService"
      Vital="yes"
      Interactive="no" />


    <ServiceControl
      Id="StartService"
      Name="My Server" 
      Remove="uninstall" 
      Start="install" 
      Stop="both" 
      Wait="yes" /> 

</Component>

Создать базу данных

    <CustomAction 
        Id="RunDataUtility"
        Directory="BIN_FOLDER" ExeCommand="[BIN_FOLDER]\DataUtility.exe" 
        Execute="immediate" Impersonate="yes" Return="ignore" />


    <InstallExecuteSequence>


        <Custom Action="RunDataUtility"                
  After="InstallFinalize" ><![CDATA[ NOT(Installed) ]]></Custom>

    </InstallExecuteSequence>

1 Ответ

1 голос
/ 01 февраля 2020

Необходимо изменить пользовательское действие, чтобы оно было отложено и запланировано до запуска StartServices. Планирование за пределами транзакции установки после InstallFinalize занимает много времени после запуска службы.

Я настоятельно рекомендую прочитать и понять:

http://www.installsite.org/pages/en/isnews/200108/index.htm

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