У меня есть следующий .wxs файл:
<?xml version="1.0" encoding="UTF-8"?>
<?define ProductVersion="x.x.x.x" ?>
<?define UpgradeCode="{**MYGUID**}" ?>
<?define Manufacturer="My Company" ?>
<?define ProductName="My Product" ?>
<?define SkuName="MyProduct" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="$(var.ProductName)"
Language="1033"
Version="$(var.ProductVersion)"
Manufacturer="$(var.Manufacturer)"
UpgradeCode="$(var.UpgradeCode)">
<Package InstallerVersion="301"
Compressed="yes"
InstallPrivileges="elevated"
InstallScope="perMachine"
Platform="x86" />
<Media Id="1"
Cabinet="$(var.SkuName).cab"
EmbedCab="yes" />
<Directory Id="TARGETDIR"
Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="ManufacturereDirectory"
Name="$(var.Manufacturer)">
<Directory Id="ProductDirectory"
Name="$(var.ProductName)" />
</Directory>
</Directory>
</Directory>
<ComponentGroup Id="MainComponentGroup">
<Component Directory="ProductDirectory">
<File Name="$(var.MyProject.TargetFileName)"
Source="$(var.MyProject.TargetPath)"
KeyPath="yes"
Vital="yes" />
<ServiceInstall Id="SeviceInstall"
Name="$(var.ProductName)"
DisplayName="$(var.ProductName)"
Type="ownProcess"
Interactive="no"
Start="auto"
Vital="yes"
ErrorControl="normal"
Account="LOCALSYSTEM">
</ServiceInstall>
<ServiceControl Id="ServiceControl_Start"
Name="$(var.ProductName)"
Start="install"
Wait="no" />
<ServiceControl Id="ServiceControl_Stop"
Name="$(var.ProductName)"
Stop="both"
Remove="uninstall"
Wait="yes" />
</Component>
</ComponentGroup>
<Feature Id="MainFeature"
Level="1">
<ComponentGroupRef Id="MainComponentGroup" />
</Feature>
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion Property="UPGRADEFOUND"
Minimum="0.0.0.1" IncludeMinimum="yes"
Maximum="$(var.ProductVersion)" IncludeMaximum="yes"
OnlyDetect="no"
IgnoreRemoveFailure="yes"
MigrateFeatures="yes"/>
</Upgrade>
<CustomAction Id="ServiceRestarter"
Directory="ProductDirectory"
ExeCommand=""[SystemFolder]sc.exe" failure "$(var.ProductName)" reset= 60 actions= restart/0"
Impersonate="no" />
<InstallExecuteSequence>
<InstallExecute Before="RemoveExistingProducts" />
<RemoveExistingProducts Before="InstallFinalize" />
<Custom Action="ServiceRestarter" After="InstallFinalize"><![CDATA[NOT Installed]]></Custom>
</InstallExecuteSequence>
</Product>
</Wix>
До этого я пробовал:
<CustomAction Id="ServiceRestarter"
Property="QtExecCmdLine"
Value='"[SystemFolder]sc.exe" failure "$(var.ProductName)" reset= 60 actions= restart/0' />
который, по-видимому, называется sc.exe
, но ничего не изменил...
До этого я пробовал:
<ServiceInstall Id="SeviceInstall"
Name="$(var.ProductName)"
DisplayName="$(var.ProductName)"
Type="ownProcess"
Interactive="no"
Start="auto"
Vital="yes"
ErrorControl="normal"
Account="LOCALSYSTEM">
<ServiceConfig Id="ServiceConfig"
DelayedAutoStart="yes"
OnInstall="yes"
OnReinstall="yes"
OnUninstall="no"
FailureActionsWhen="failedToStopOrReturnedError" />
<ServiceConfigFailureActions Id="ServiceRestarter"
OnInstall="yes"
OnReinstall="yes"
OnUninstall="no"
ResetPeriod="0">
<Failure Action="restartService" Delay="0" />
<Failure Action="restartService" Delay="0" />
<Failure Action="restartService" Delay="0" />
</ServiceConfigFailureActions>
</ServiceInstall>
который не работал, поскольку таблица MsiServiceConfigFailureActions
не работает, если используется установщик < 5.0, и даже при использовании InstallerVersion="500"
единственное, что я получаю, это ошибка:
Не удалось настроить Serivce 'My Product' (Мой продукт). Это могло, это может быть проблемой с пакетом или вашими разрешениями. Убедитесь, что вы имеют достаточные привилегии для настройки системных служб.
(и да... Я уже пробовал InstallPrivilges="elevated"
, но... реальная проблема - Action="restartService"
в соответствии с this)
Итак... использование CustomAction
- путь (или нет?).
У меня есть следующий вывод журнала
MSI (s) (34:28) [13: 56: 46: 914]: Примечание: 1:1722 2: ServiceRestarter 3: C:\Program Files (x86)\My Company\My Product\4: "C:\Windows\SysWOW64\sc.exe" сбой "Мой продукт" reset= 60 действий = перезагрузка /0
MSI (s) (34:28) [13: 56: 46: 914]: Примечание: 1: 2205 2: 3: Ошибка
MSI (s) (34:28) [13: 56: 46: 914]: Примечание: 1: 2228 2: 3: Ошибка 4: SELECTMessage
FROMError
ГДЕError
= 1722
MSI (c) (2C: 0C) [13: 56: 46: 914]: Создан шрифт. Charset: Req = 0, Ret = 0, Font: Req = MS Shell Dlg, Ret = MS Shell DlgОшибка 1722. Существует проблема с этим пакетом установщика Windows. Программа, выполняемая как часть настройки, не завершилась так, как ожидалось. Обратитесь к вашему персоналу службы поддержки или поставщику пакета. Действие ServiceRestarter, местоположение: C:\Program Files (x86)\My Company\My Product \, команда: "C:\Windows\SysWOW64\sc.exe" сбой "My Product" reset= 60 действий = перезагрузка /0
MSI (s) (34:28) [13: 56: 48: 849]: Примечание: 1: 2205 2: 3: Ошибка
MSI (s) (34:28) [13: 56: 48: 849]: Примечание: 1: 2228 2: 3: Ошибка 4: SELECTMessage
FROMError
WHEREError
= 1709
MSI (s) (34:28) [13: 56: 48: 849]: Продукт: Мой продукт - ошибка 1722. Существует проблема с этим пакетом установщика Windows. Программа, выполняемая как часть настройки, не завершилась так, как ожидалось. Обратитесь к вашему персоналу службы поддержки или поставщику пакета. Действие ServiceRestarter, местоположение: C:\Program Files (x86)\My Company\My Product \, команда: "C:\Windows\SysWOW64\sc.exe" сбой "My Product" reset= 60 действий = перезагрузка /0Действие закончилось 13:56:48: ServiceRestarter. Возвращаемое значение 3.
Действие закончилось 13:56:48: УСТАНОВКА. Возвращаемое значение 3.
Кто-нибудь может мне помочь?
изменить
Я использовал старый ServiceConfig
-extension:
<util:ServiceConfig xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
FirstFailureActionType="restart"
SecondFailureActionType="restart"
ThirdFailureActionType="restart"
ResetPeriodInDays="1"
RestartServiceDelayInSeconds="20" />
который дает мне следующую ошибку сборки:
ошибка CNDL0200: элемент ServiceInstall содержит необработанную элемент расширения 'util: ServiceConfig'. Убедитесь, что расширение элементов в 'http://schemas.microsoft.com/wix/UtilExtension' пространство имен было при условии,.
Я знаю, что могу разрешить эту ошибку, используя -ext WixUtilExtension
через командную строку, но я хочу использовать Visual Studio для построения... Так как я могу адаптировать команду сборки?
Единственный шанс - добавить ссылку на WixUtilExtension.dll
к моему проекту.