WIX: Windows服务修复失败缺乏权限+如何检测修复模式

本文关键字:何检测 模式 检测 Windows 服务 失败 WIX 权限 | 更新日期: 2023-09-27 18:01:26

我们的WIX安装程序在通过自定义UI对话框询问登录帐户后安装windows服务。安装成功后服务启动。整个安装需要提升权限。

希望有关于几个问题的任何指示:

问题1 在尝试从"添加/删除程序"进行"修复"时,UAC提示权限提升。允许这样做后,修复仍然失败,并显示消息:

"无法安装服务。"验证您是否有足够的权限来安装系统服务"。

代码节选:

特权…

  <Component Id="C_ServiceEXE" Guid="{105F9C86-BF07-43C8-8C78-DF30F012CD68}">
    <File Id="$(var.TargetFileName)" Name="$(var.TargetFileName)" KeyPath="yes"  Assembly=".net"
          AssemblyManifest="$(var.TargetFileName)" AssemblyApplication="$(var.TargetFileName)" DiskId="1"
          Source="$(var.TargetDir)'$(var.TargetFileName)" />
    <Condition>Privileged</Condition>
    <ServiceInstall Id="Id_ServiceInstall"
                     Name ="$(var.ServiceName)"
                     Description="$(var.ServiceDescription)"
                     DisplayName="$(var.ServiceName)"
                     Account="[SERVICEACCOUNT]"
                     Password="[SERVICEPASSWORD]"
                     Start="auto"
                     ErrorControl="normal"
                     Type="ownProcess"
                     Vital="yes"
                     Interactive="no"
                     />
    <ServiceControl Id="Id_ServiceControl"
                    Name ="$(var.ServiceName)"
                     Remove="uninstall"
                     Start="install"
                     Stop="both"
                     Wait="yes"
                    />
  </Component>

我不太确定为什么会发生这种情况,因为我在我的Win7开发盒上管理并标记了安装程序,特别是服务安装组件以特权模式运行。

我怀疑我可能在admininstalleexecute序列中缺少调度修复,但不太确定这是否会解决这个问题。

问题2 此外,相关的问题是-如果修复成功,它会再次要求用户通过UI输入登录帐户。我宁愿在修复或升级期间抑制所有交互式ui。我实现了UPGRADINGPRODUCTCODE来检测升级。

但是如何检测修复呢?

感谢您的帮助和指点

WIX: Windows服务修复失败缺乏权限+如何检测修复模式

维护模式很可能失败,因为您的服务用户帐户没有作为服务登录的权利。如果你是管理员,你不能在没有给用户登录权限的情况下为他安装服务。

如果设置此策略有效,您还需要在安装期间动态地执行此操作。一个解决方案是使用nights .exe作为自定义操作。此自定义操作可以使用包含用户帐户信息的自定义属性。

要检测修复过程,您可以检查重新安装属性值。