Итак, я сделал сервис с 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>