次の .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>
5.0未満のインストーラーを使用している場合、MsiServiceConfigFailureActions
テーブルInstallerVersion="500"
が機能しないため、機能しませんでした。エラーが発生した場合でも、
Service 'My Product' (My Product) を構成できませんでした。これは、パッケージまたはパーミッションに問題がある可能性があります。システム サービスを構成するための十分な権限があることを確認します。
(そしてはい、...私InstallPrivilges="elevated"
も試しました-しかし...本当の問題はAction="restartService"
これによるものです)
だから... aを使うの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" エラー "My Product" reset= 60 アクション= restart/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
WHEREError
= 1722
MSI (c) (2C:0C) [13:56: 46:914]: フォントが作成されました。文字セット: Req=0、Ret=0、フォント: 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" リセット = 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]: 製品: My Product -- エラー 1722。この Windows インストーラー パッケージには問題があります。セットアップの一部として実行されたプログラムが期待どおりに終了しませんでした。サポート担当者またはパッケージ ベンダーにお問い合わせください。アクション ServiceRestarter、場所: C:\Program Files (x86)\My Company\My Product\、コマンド: "C:\Windows\SysWOW64\sc.exe" 失敗 "My Product" リセット = 60 アクション = 再起動/0アクションは 13:56:48 に終了しました: ServiceRestarter。戻り値 3。
アクションは 13:56:48 に終了しました: INSTALL。戻り値 3。
誰でも私を助けることができますか?
編集
私は古いServiceConfig
拡張子を使用しました:
<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
私のプロジェクトへの参照を追加することです。