我想知道我应该在GAC中部署哪种程序集.
案例1:如果在我的解决方案中多个项目使用log4net.dll,那么它应该部署在GAC中吗?
案例2:如果我在一台机器中部署了多个应用程序,每个使用log4net.dll,这是将log4net.dll部署到GAC的原因吗?
我应该何时更改或不更改WIX中的组件GUID? Microsoft SDK信息令人困惑.
Glytzhkof编辑:为了澄清,该问题涉及何时应该为MSI组件更改组件GUID.组件可以通过以下方面进行更改:更改目标路径,向/从同一组件添加或删除文件,添加注册表数据等...这会导致所谓的组件引用问题,即最佳实践在MSI中创建组件.
在静默模式下使用msiexec安装.MSI文件时,是否可以将其自动化,以便在安装失败时回滚到以前的版本?假设在安装时已经安装了较旧的应用程序版本.
我有一个常见的场景,但我很难让事情完全发挥作用.
这个场景非常简单,我想对产品进行重大升级,而无需更改服务设置,也无需重启.
我主要通过在DeleteServices上使用条件NOT UPGRADINGPRODUCTCODE来工作.但是,在升级期间不会停止服务,因此需要重新启动.
升级是否有某种方法可以停止服务,安装新文件并重新启动服务而无需删除/安装服务?
我正在使用WiX处理MSI安装程序.我试图尽可能简化开发:这是一个内部产品,我的用户就是我们的IT人员.
该产品包括一个Windows服务,必须配置为在每台计算机的不同帐户下运行.
我为我的用户规划的工作流程(首次安装)如下:
sc或本地服务小程序停止服务后续更新将包括从更新的MSI文件安装.
测试"小"更新时,我惊讶地发现安装程序将服务重置为在默认帐户下运行.这对我来说是一个主要问题,因为它使我的用户很难更新他们的服务器.每次有更新时,他们都必须在每台机器上重新输入帐户信息.我预计会发生"重大"更新,但不是"小"更新.
有没有办法配置安装程序,以便它不会在"小"或"次要"更新期间更改服务的现有帐户/密码配置?
这也会在"修复"过程中发生(我还没试过)?
这是我的组件在.wxs文件中的样子:
<Component Id="cmpService" Guid="{MYGUIDHERE}">
<File Id="filService" KeyPath="yes" Name="ServiceApp.exe" />
<ServiceInstall Id="ServiceInstall" Name="ServiceApp" DisplayName="My Service"
Type="ownProcess" Start="auto" ErrorControl="normal"
Account="LocalSystem">
<util:PermissionEx ... attributes here... />
</ServiceInstall>
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall"
Name="ServiceApp" Wait="yes" />
</Component>
Run Code Online (Sandbox Code Playgroud)
Remove="uninstall"如果没有任何变化,我原本预计会保留服务.显然不是.(如果在"主要"更新中发生这种情况,我不会太担心).
我还注意到ServiceConfig元素的属性(OnReinstall)似乎符合条件,但基于蜡烛错误消息,很明显,它OnReinstall只是为了影响元素的配置成员(PreShutdownDelay等等)而不是服务安装.整个.
我调查过这些:
奇怪的是,这个答案表明这只是"主要"升级的问题.那不是我的经历.我的经历是侥幸吗?
在安装过程中提示输入帐户和密码会很好,但是在这种情况下将密码存储在注册表或其他地方并不是一个真正的选择,并且必须在每次更新时重新输入凭据就像必须重新配置一样具有破坏性.手工服务.
我正在开发一个应该在wix v3.8中安装Windows服务的安装程序.问题是我们需要进行重大升级而不卸载服务只是为了阻止它.
我们在包含服务exe文件的组件中使用ServiceInstall和ServiceControl.有没有办法使ServiceInstall的执行有条件(使用像REMOVE ="ALL"和NOT UPGRADINGPRODUCTCODE这样的条件)所以升级时没有卸载服务(刚刚停止,所以我们可以升级文件)?
一种解决方案是使用自定义操作,但也许有更好的方法?
谢谢!