WIX:Windows服务修复因缺少权限而失败+如何检测修复模式?

时间:2011-07-08 00:02:18

标签: c# wix installation wix3.5

我们的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可以检测升级。

但是如何检测到修复?

感谢任何帮助或指示。

1 个答案:

答案 0 :(得分:0)

维护模式很可能失败,因为您的服务用户帐户无权log on as a service。如果您是管理员,则无法为用户安装服务而无需向他提供正确的登录。

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

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