2017-11-20 25 views
0

私は本当に大変残念です。私はこのサイト自体とおそらく他のサイトの他の多くの投稿をチェックしました。私はサービスの再インストール&をアンインストールせずにメジャーアップグレードを動作させることができません。私は製品コードとバージョンを変更しており、UpgradeFileComponentはアップグレードの一部であるコンポーネントです。残りはすべて1.0.0と同じです。私はPOCをやっているので、この小さな変更(パッチとしてではなく、主要なアップグレードとして)だけをしたいと考えています。以下は私のProduct.wxsです。 ServiceAccountDlg、Variables.wxi、またはen-us.wxlのような他のもののマークアップは含まれていません。誰でも助けてくれますか?私はすでにWIX_UPGRADE_DETECTED、UPGRADINGPRODUCTCODEなどを試していますが、動作させることはできません。毎回、サービスがアンインストールされ、再インストールされています。私はこれを次のように検証しています。サービスが開始されると、ProgramDataにログファイルが作成され、5秒ごとに追加されます。 MSIのアンインストール中に、このログファイルとそのフォルダを削除します。サービスが再インストールされ再起動されると、ログファイルが再び作成されます。これで、私は、サービスが常にメジャーアップグレードで再インストールされていることが分かりました。サービスを再インストールしたり、アンインストールしている他のコンポーネントを使わずに、新しいファイルを展開したいだけです。私は、ツールセットが変更されたファイルをチェックし、変更があった場合にのみそれらを再インストールするという人から聞いたことがあります。しかし、これはそうではないようです。私はさまざまな値でスケジュール属性を使用しようとしましたが、運はありません。どんな助けも本当に素晴らしいでしょう。私は運が無くても何度もこれを試してきました。私より多くの情報が必要な場合はお知らせください。Windowsサービスをアンインストールせずにメジャーアップグレード

<?xml version="1.0" encoding="UTF-8"?> 
<?include Variables.wxi ?> 

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util='http://schemas.microsoft.com/wix/UtilExtension'> 
    <Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="!(loc.LANG)" Version="$(var.ProductVersion)" Manufacturer=" MyCompany" UpgradeCode="$(var.UpgradeCode)"> 

    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Id="*" /> 

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 

    <!--<Upgrade Id="$(var.UpgradeCode)"> 
     <UpgradeVersion OnlyDetect="yes" Minimum="1.0.0" Maximum="2.0.0" IncludeMinimum="yes" IncludeMaximum="yes" Property="NEWERFOUND" /> 
    </Upgrade>--> 

    <InstallExecuteSequence> 
     <!--<RemoveExistingProducts After="InstallExecute" /> 
     <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>--> 
     <!--<InstallServices>NOT UPGRADINGPRODUCTCODE,NOT WIX_UPGRADE_DETECTED</InstallServices>--> 
     <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices> 
    </InstallExecuteSequence> 

    <Condition Message='This application only runs on Windows 7 or higher OS versions.'> 
     <![CDATA[Installed OR (VersionNT64 >= 601)]]> 
    </Condition> 

    <MediaTemplate /> 

    <Property Id="MSIFASTINSTALL" Value="1"/> 
    <Property Id="MsiLogging" Value="v" /> 
    <Property Id="MSIENFORCEUPGRADECOMPONENTRULES" Value="1" /> 
    <Property Id="INSTALLDIR"> 
     <RegistrySearch Id='MyCompanyMSISampleRegistry' Type='raw' Root='HKLM' Key='SOFTWARE\MyCompany\CustomApp' Name='INSTALLDIR' Win64='yes' /> 
    </Property> 

    <WixVariable Id="WixUILicenseRtf" Value="License.rtf" /> 
    <Feature Id='Complete' Title='Foobar 1.0' Description='The complete package.' 
    Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR' AllowAdvertise='no' InstallDefault='local' Absent='disallow'> 

     <Feature Id="FileFeature" Title="File Feature" Level="1" AllowAdvertise='no' InstallDefault='local' Absent='disallow' Display='expand'> 
     <ComponentRef Id="FileComponent"/> 
     <ComponentRef Id="UpgradeFileComponent"/> 
     </Feature> 
     <Feature Id="ServiceFeature" Title="Service Feature" Level="1" AllowAdvertise='no' InstallDefault='local' Absent='disallow' Display='expand'> 
     <ComponentRef Id="ServiceComponent"/> 
     <ComponentRef Id="deleteFolder"/> 
     </Feature> 
     <Feature Id="RegistryFeature" Title="Registry Feature" Level="1" AllowAdvertise='no' InstallDefault='local' Absent='disallow' Display='expand'> 
     <ComponentRef Id="RegistryComponent"/> 
     </Feature>   
     <Feature Id='Documentation' Title='Description' Description='The instruction manual.' Level='2' AllowAdvertise='no' InstallDefault='followParent' Absent='disallow'> 
     <ComponentRef Id='Manual' /> 
     </Feature> 

    </Feature> 
    <!--<UIRef Id="WixUI_Mondo"/> 
    <UIRef Id="WixUI_ErrorProgressText" />--> 

    <UI Id="MyWixUI_Mondo"> 
     <UIRef Id="WixUI_Mondo" /> 

     <DialogRef Id="ServiceAccountDlg" /> 

     <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="ServiceAccountDlg" Order="2">LicenseAccepted = "1"</Publish> 
     <Publish Dialog="SetupTypeDlg" Control="Back" Event="NewDialog" Value="ServiceAccountDlg">1</Publish> 
    </UI> 
    <UIRef Id="WixUI_ErrorProgressText" /> 

    <Icon Id="MyCompanyBanner.ico" SourceFile="Binary\MyCompanyBanner.ico" /> 

    </Product> 

    <Fragment> 
    <Component Id='Manual' Guid='7470A2CD-B07C-4AB4-9152-8C6AA53FA0F7' Directory='INSTALLDIR'> 
     <File Id='Manual' Name='Manual.pdf' DiskId='1' Source='1.0.0\Manual.pdf' KeyPath='yes'> 
     <Shortcut Id="startmenuManual" Directory="DesktopFolder" Name="Instruction Manual" Advertise="yes" /> 
     </File> 
    </Component> 
    </Fragment> 

    <Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLDIR" Name="$(var.InstallFolderName)" /> 
     </Directory> 
     <Directory Id="DesktopFolder" Name="Desktop" /> 
     <Directory Id="CommonAppDataFolder"> 
     <Directory Id="MyCompanyTestInstallerLogs" Name="MyCompanyTestInstallerLogs"> 
      <Component Id="deleteFolder" Guid="323549D2-90B7-4D5D-8A36-EEA0ACCCC35E"> 
      <RemoveFile Id="deleteServiceFile" Name="MyCompanyTestWinSvcLog.txt" On="both" Directory="MyCompanyTestInstallerLogs"/> 
      <RemoveFolder Directory="MyCompanyTestInstallerLogs" Id="MyCompanyTestInstallerLogs" On="both"/> 
      </Component> 
     </Directory> 
     </Directory> 
    </Directory> 
    </Fragment> 

    <Fragment> 
    <Component Id="FileComponent" Directory="INSTALLDIR" Guid="F143BE3C-48D6-4138-B4E6-5CF44773CBA5" >  
     <File Id="SampleTextFile.txt" Name="Sample.txt" Source="$(var.Version)\Sample.txt" KeyPath="yes"> 
     <Shortcut Id="startmenuSampleText" Directory="DesktopFolder" Name="MyCompany MSI Sample" WorkingDirectory='INSTALLDIR' Icon='MyCompanyBanner.ico' Advertise='yes' /> 
     </File> 
    </Component> 
    </Fragment> 

    <Fragment> 
    <Component Id="UpgradeFileComponent" Directory="INSTALLDIR" Guid="4582597C-2CE0-451E-8B89-83BA4ABCE464">  
     <File Id="SampleXMLFile.xml" Name="Sample.xml" Source="$(var.Version)\Sample.xml" KeyPath="yes" /> 
    </Component> 
    </Fragment> 

    <Fragment> 
    <Component Id='ServiceComponent' Directory="INSTALLDIR" Guid="AEA0E53F-3D70-4010-8592-9A01FE49344D"> 
     <util:User Domain="[DOMAIN]" Id="svcUser" Name="[USER_NAME]" Password="[PASSWORD]" LogonAsService="yes" CreateUser="no"/> 
     <File Id='MyCompanyTestWinSvc' Name='MyCompanyTestWinSvc.exe' Source='Binary\MyCompanyTestWinSvc.exe' KeyPath='yes' /> 
     <ServiceInstall Id="installMyCompanyTestWinSvc" Name="MyCompanyTestWinSvc" DisplayName="MyCompany Install Test Windows Service" Start="auto" ErrorControl="normal" Type="ownProcess" Account="[DOMAIN]\[USER_NAME]" Password="[PASSWORD]" /> 
     <ServiceControl Id="sc_MyCompanyTestWinSvc" Name="MyCompanyTestWinSvc" Start="install" Stop="both" Remove="uninstall" Wait="yes" /> 
     <ServiceControl Id="stopAndStartIIS" Name="IISADMIN" Start="uninstall" Stop="install" Wait="yes" /> 
     <ServiceControl Id="stopAndStartSQL" Name="MSSQLSERVER" Start="uninstall" Stop="install" Wait="yes" /> 
    </Component> 
    </Fragment> 

    <Fragment> 
    <Component Id="RegistryComponent" Directory="INSTALLDIR" Guid="8D8D93A4-09F5-4511-B291-720A7BC70529"> 
     <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' /> 
    </Component> 
    </Fragment> 

</Wix> 
+0

可能な複製(https://stackoverflow.com/questions/47307640/wix-upgrade-without-uninstallation-of-existing-version)それは私のために働いていない –

答えて

0

私は私の<InstallExecuteSequence>

<!-- http://stackoverflow.com/questions/15965539/how-to-only-stop-and-not-uninstall-windows-services-when-major-upgrade-in-wix don't change service config on upgrade --> 
<DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>    
<InstallServices>NOT WIX_UPGRADE_DETECTED</InstallServices> 

にこれを追加しましたが私のために働くように見えたが、私は、製品の変更にはもうこれを使用しないでください。 doは、アップグレード中にサービスをアンインストールしてインストールする必要があるため、バージョン間でサービスの設定を変更しないでください。唯一の本当のunininstallに削除されます

サービス(ロブ[コメント質問の回答]はサービスのインストール/アンインストールの状態はコンポーネントに記載されているので削除状態の周りに調節する必要はありませんノート)

そして、最初のインストール時にのみサービスをインストールします。

+0

、しかし、。いずれにしても、サービスexeに変更がなくても、サービスを削除/アンインストールしています。 – Ven

1

あなたのMajorUpgradeは、スケジュールされている場所を指定していません。ドキュメントで言うように、デフォルトはInstallValidateの後にあり、 "このスケジューリングはアップグレード製品をインストールする前にインストールされた製品を完全に削除します。"したがって、メジャーアップグレードは古い製品を完全にアンインストールし、サービスを削除してからアップグレードをインストールします。

大規模なアップグレードをafterInstallExecuteにスケジュールすることから始める必要があります。これは、既存のインストール済み製品の上にアップデートのように動作し、参照カウントがサービスの中断を最小限に抑えるためです。つまり、コンポーネントのルールに従い、置き換えが必要なバージョン管理されたファイルのファイルバージョンをインクリメントする必要があります。

アップグレードは常に古い製品のアンインストールであるため、古いバージョンのServiceControlが実行され、アップグレード中にRemove = "both"が問題の可能性があります。オリジナルのWiX ServiceControlが重要です。

また、コンポーネントルールに従わないと、afterInstallValidateのアップグレードはすべて正常に機能します。すべてをアンインストールしてから新しい製品をインストールするからです。しかし、afterInstallExecuteのアップグレードでコンポーネントルールが追跡されていない場合、(コンポーネントIDが異なるために)サービスコンポーネントがアンインストールされている可能性があり、ルールに従わない他の影響がある可能性があります。

また、新しいインストールで削除サービスで条件を指定する必要はありません。私はちょうどより良い場所でメジャーアップグレードを順序づけることによって始めます。また、新しいアップグレードの条件としてのUPGRADINGPRODUCTCODEは、まったく効果がありません。このプロパティは、アップグレードでアンインストールする場合は古い製品に設定されます。このプロパティを使用する場合は、すでにインストールされている元の製品に含まれている必要があります。そのため、出荷されインストールされている場合は、パッチを使用しないでコードを変更することができません。

MSIのログをより詳細に表示すると、何が起きているのか、どのような順番で表示されるのでしょうか?その文字列をvoicewarmupとして指定します。 [WiXのは、既存のバージョンをアンインストールせずにアップグレード]の

+0

前述のように、私はSchedule属性と可能なすべての値を試していましたが、運はありません。私のProduct.wxsファイルを見て、コンポーネントルールに違反しているかどうかを教えてください。また、明確な方法でコンポーネントルールを定義する具体的なブログ/フォーラム/記事を見つけることができませんでした。 Rob Menschingは記事を書いたが、私はそれを理解できなかった。 – Ven

+0

コンポーネントルールは、ファイル、レジストリエントリのすべてのコンポーネントIDに関連しており、製品のwxsファイルには表示されません。あなたのアップグレードのデフォルトのスケジュールが間違った場所であることはまだありませんので、aferInstallExecuteと私は結果をより具体的に説明し、完全な詳細を得て、古い製品がサービスを削除している場合は、アップグレードMSIでそのことについて何もできることはありません。 – PhilDW

+0

お返事ありがとうございました。それで、私のコンポーネントはルール通りではないと言っていますか?もしそうなら、それらを訂正するのを手伝ってください。また、私が以前に述べたように、私はSchedule = "afterInstallExecute"と "afterInstallFinalize"を試みたが、何も働かなかった。ログファイルには、明らかにサービスの削除アクションのエントリがあります。 – Ven

関連する問題