【问题标题】:WIX: Windows Service Repair failing on lack of permissions + how to detecting repair mode?WIX:Windows 服务修复因缺少权限而失败 + 如何检测修复模式?
【发布时间】:2011-07-08 00:02:17
【问题描述】:

我们的 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 开发盒上,并且已将设置和特别是服务安装组件标记为以特权模式运行。

我怀疑我可能在 AdminInstallExecute 序列中缺少计划修复,但不太确定这是否能解决此问题。

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

但是如何检测修复?

感谢任何帮助或指点。

【问题讨论】:

    标签: c# wix installation wix3.5


    【解决方案1】:

    维护模式很可能会失败,因为您的服务用户帐户没有log on as a service 的权限。不管你是不是管理员,如果没有给他登录权,你就不能为他安装服务。

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

    要检测修复过程,您可以检查REINSTALL 属性值。

    【讨论】:

    • 应该提到我正在为以后的 Vista 构建设置。在 Windows 7 上,使用 installUtil.exe 安装服务时,登录权限会自动授予指定的服务帐户。 (需要在 vista 上检查相同的内容)。
    • 问题似乎修复/重新安装就像新安装一样(不知道安装程序是否首先卸载)。在修复时,我的要求登录帐户的 UI 没有出现,导致 SERVICEACCOUNT 未初始化为一些默认的 blah 值。这会导致服务安装失败,从而导致修复/重新安装失败。 感谢您的回复。 NTrights.exe 似乎针对较旧的操作系统版本,应该说我的目标是从 Vista 开始,该实用程序不存在(我可能遗漏了一些东西)。跨度>
    • 在您的代码示例中,您使用的是 ServiceInstall 和 ServiceControl 表。因此,您需要像我解释的那样将登录设置为服务策略。 “ntrights.exe”可以在 Vista 和 Windows 7 上运行,只要执行它的自定义操作被延迟且没有模拟。
    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2019-12-09
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多