Я изо всех сил стараюсь, чтобы файлы MajorUpgrade, ServiceControl,.config работали вместе. После моего другого вопроса, теперь я снова вижу противоположную проблему.
Раньше файлы не перезаписывались, потому что AssemblyFileVersions были статичными, поэтому я исправил это. 1) Теперь даже с Schedule="afterInstallExecute"
мой KeyPath='yes'
.config файл все еще перезаписывается, даже если дата изменения существующего файла отличается от даты создания файла, и это установлен как KeyPath. В настоящее время мне приходится перезаписывать файл .config и перезагружать службу после установки.
2) И даже если я исправлю это, у меня все еще есть проблема избежания перезагрузки. Если я скажу Schedule="afterInstallInitialize"
, то я верю, что файл .config, безусловно, будет удален вместе со службой слишком рано. Если я скажу Schedule="afterInstallExecute"
, то служба не будет остановлена и после установки потребуется перезагрузка. (Правильно ли это?) Остановить службу вручную до установки, позвольте мне избежать перезагрузки. Добавление пользовательского действия net stop
могло бы сработать, чтобы заменить ServiceControl
, я думаю, но получение всех условий правильно кажется сложным.
3) В качестве бонуса я бы хотел НЕ удалить службу вообще во время обновления. Могу ли я просто остановить службу, заменить двоичный файл и снова запустить службу? Это означает избежать повторного ввода учетных данных учетной записи службы для обновления. Но, конечно, его еще нужно установить при первой установке и удалении при удалении функции.
Здесь мясо его (которое также поставляется позже, в случае, если это имеет какое-то значение):
<MajorUpgrade DowngradeErrorMessage="A newer version is already installed."
Schedule="afterInstallExecute" />
<ComponentGroup Id="ServiceCG">
<Component Id="Service" Guid='*' Win64='yes' Directory='INSTALLDIR'>
<File Id='ServiceEXE' Source='$(var.root)Service.exe' />
<ServiceInstall Id="ServiceInstall"
Name="MyService"
DisplayName="My Server"
Type="ownProcess"
Start="auto"
ErrorControl="normal"
Description="My Server Service"
Interactive="no"
Account="[...]"
Password="[...]" />
<ServiceControl Id="StopService" Name="MyService" Start="install"
Stop="uninstall" Wait="yes" Remove="both" />
<util:User Id="UpdateServiceAccountLogonAsService" UpdateIfExists="yes"
CreateUser="no" Name="[SERVICEACCOUNTFULL]"
LogonAsService="yes"/>
</Component>
<Component Id="ServiceConfig" Guid='*' Win64='yes' Directory='INSTALLDIR'>
<File Id='FileServiceConfig' KeyPath='yes'
Source='$(var.root)Service.exe.config' />
</Component>
</ComponentGroup>
Связано, но не отвечает:
Версия WiX 3.8.1128.0