2011-07-08 22 views
1

我们的WIX安装程序在通过自定义UI对话框询问登录帐户后安装Windows服务。 服务在安装成功后启动。 整个安装过程需要提升权限。WIX: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输入登录帐户。 我宁愿在修复或升级期间禁止所有交互式用户界面。我意识到UPGRADINGPRODUCTCODE来检测升级。

但是如何检测到修复?

欣赏任何帮助或指针。

回答

0

维护模式很可能会失败,因为您的服务用户帐户无权使用log on as a service。无论您是否是管理员,都无法为用户安装服务,而无需向他提供正确的日志。

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

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

+0

应该提到我是从Vista开始建设的。在Windows 7上使用installUtil.exe安装服务时,登录权会自动授予指定的服务帐户。 (需要在Vista上检查相同)。 – Sameer

+0

该问题似乎是修复/重新安装是一个像新的安装(不知道如果安装程序第一次卸载)。在修复时,我的用户界面要求登录帐户不显示,导致SERVICEACCOUNT unintialized某些默认等值。这会导致服务安装失败,导致修复/重新安装失败。_感谢您的回应._ NTrights.exe似乎针对老版本的操作系统,本应该说我瞄准了Vista,因为这个工具看起来并不存在(我可能会错过一些东西)。 – Sameer

+0

在您的代码示例中,您正在使用ServiceInstall和ServiceControl表。所以你需要像我解释的那样将服务策略设置为日志。 “ntrights.exe”可以在Vista和Windows 7上运行,只要执行它的自定义操作被推迟而没有模拟。 –