Jas*_*ban 10 installer windows-installer wix major-upgrade
我正在努力让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>
Run Code Online (Sandbox Code Playgroud)
相关但未答复:
WiX版本3.8.1128.0
编辑:似乎对同一问题或至少在同一主题上的这种解释可能更容易理解:Msiexec:在安装失败时自动回滚到以前的版本
您正在敲打几个核心MSI使用问题.
组件引用:指分配给MSI组件的GUID以及它们必须如何匹配一个,并且在所有升级中始终只有一条(绝对)路径.通过以下几个示例来更好地讨论这个问题:在wix中更改我的组件GUID?
我没有提到将安装服务的MSI组件设置为永久性以防止在卸载时将其删除的选项,原因很简单,这根本不是好的做法.然后文件和注册将保留在最终卸载状态,您需要自定义操作进行清理.非常糟糕的做法,并且必然导致许多额外的工作和悬挂组件引用的问题.
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |