Установщик Wix удаляет случайные DLL при обновлении - PullRequest
0 голосов
/ 14 июля 2020

Итак, я сделал сервис с net ядром 2.2 (и развернул несколько его версий msi ( 1.3 )) только для того, чтобы увидеть, что его поддержка окончена, поэтому я понизил версию приложения до последней версии. 2.1 lts и создал новую версию 1.4 .

Проблема в том, что MSI игнорирует некоторые из старых версий dll при обновлении, что приводит к некоторым случайным отсутствующим dll после обновления и неработающая служба. Должно быть 400 файлов, но их около 250

Когда я удаляю старую версию вручную и устанавливаю новую, все работает как задумано.

Так что я подумал, что в целом будет лучше, когда msi очистится двоичную папку, прежде чем выполнять обновления, так что каждое "обновление" в любом случае будет чистой установкой.

Я пробовал

  • RemoveFolderEx
  • RemoveExistingProducts

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

Я был бы признателен за помощь.

Ниже мой wxs. (я отрезал около 400 автономных dll)

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="*" Name="Company Service" Language="1033" Version="1.4.0.0" Manufacturer="mycompany" UpgradeCode="298d3b82-3c3b-4315-bfdc-9e54c873eae6">
        <Package InstallerVersion="300" Compressed="yes" InstallScope="perMachine" Platform="x64"/>

        <MajorUpgrade Schedule="afterInstallInitialize"
        DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
        <MediaTemplate EmbedCab="yes" />

        <!--<InstallExecuteSequence>
            <RemoveExistingProducts After="InstallInitialize"/>
        </InstallExecuteSequence>-->

        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="CommonAppDataFolder">
                <Directory Id ="CommonAppDataManufacturerFolder" Name="Company">
                    <Directory Id="ServicesFolder" Name="Services">
                        <Directory Id="APPLICATIONROOTDIRECTORY" Name="Service">
                            <Directory Id="APPLICATIONBINDIRECTORY" Name="bin">
                                <Component Id='APPLICATIONBINDIRECTORY' Guid='f0342819-30f9-4595-9e09-0ed6a77729b4'  Win64="yes">
                                    <CreateFolder/>
                                    <util:RemoveFolderEx Id='REMOVEAPPLICATIONBINDIRECTORY' Property='BINDIRECTORYPROPERTY' On='both' />
                                </Component>
                            </Directory>
                        </Directory>
                    </Directory>
                </Directory>
            </Directory>
        </Directory>
        <Property Id='BINDIRECTORYPROPERTY' Secure='yes' Value='C:\ProgramData\Company\Services\Service\bin'></Property>

        <!-- Step 2: Add files to your installer package -->
        <DirectoryRef Id="APPLICATIONBINDIRECTORY">
            <Component Id="Service.exe" Win64="yes">
                <File Id="Service.exe" Source="C:\Service\bin\Release\netcoreapp2.1\win-x64\publish\Service.exe" KeyPath="yes"/>
                <ServiceInstall Id="CompanyServiceInstaller" Account="LocalSystem" Name="CompanyService" DisplayName="Company Service"
                                ErrorControl="ignore" Interactive="no" Start="auto" Type="ownProcess" Vital="yes" >
                </ServiceInstall>
                <ServiceControl Id="StartCompanyService" Name="CompanyService" Start="install" Wait="no" ></ServiceControl>
                <ServiceControl Id="StopCompanyService" Name="CompanyService" Stop="both" Remove="uninstall" Wait ="yes" ></ServiceControl>
                <RegistryKey Root='HKLM' Key='Software\mycompany\Services\CompanySERVICE' Action='createAndRemoveOnUninstall'>
                    <RegistryValue Type='string' Name='Version' Value='1.10.0.0' ></RegistryValue>
                </RegistryKey>

            </Component>
            <Component Id="comp6a32f759_2ed3_4a84_9984_d1e77404a7fd" Win64="yes">
                <File Id="file2c99c118_9c3b_4ce8_b07b_b08104954efe" Source="C:\Service\bin\Release\netcoreapp2.1\win-x64\publish\some.dll"/>
            </Component>
        </DirectoryRef>

        <!-- Step 3: Tell WiX to install the files -->
        <Feature Id="_Service_Service" Title="Service" Level="1" >
            <ComponentRef Id="Service.exe"/>
            <ComponentRef Id="APPLICATIONBINDIRECTORY"/>
            <ComponentRef Id="comp6a32f759_2ed3_4a84_9984_d1e77404a7fd" />
        </Feature>
    </Product>
</Wix>
...