18

次の .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="&quot;[SystemFolder]sc.exe&quot; failure &quot;$(var.ProductName)&quot; 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: SELECT MessageFROM ErrorWHERE Error= 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: SELECT MessageFROM ErrorWHERE Error= 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私のプロジェクトへの参照を追加することです。

4

3 に答える 3

23

MSI 5.0 に付属の ServiceConfig 要素のみを試したことがわかります。ただし、UtilExtension には別の ServiceConfig 要素があり、これは長い間存在しており、質問で言及したスレッドはそれが機能することを確認しているようです。

util:ServiceConfigFirstFailureActionType要素には、使用したい 3 つのSecondFailureActionTypeパラメーターが含まれていThirdFailureActionTypeます。nonerebootrestartrunCommand

試してみて、それが機能する場合は、カスタム アクションよりもはるかに優れた選択肢です。

于 2012-09-18T12:36:48.767 に答える