【问题标题】:Start windows service as admin in wix installer在 wix 安装程序中以管理员身份启动 windows 服务
【发布时间】:2014-03-27 01:22:27
【问题描述】:

我创建了一个 Windows 服务,它添加和修改注册表项值。 Wix 安装并成功启动服务,但没有发生修改注册表项的操作,当我以管理员帐户手动启动服务时,服务运行正常。当我转到开始>管理工具>服务并右键单击我的服务,然后在属性上,然后在登录选项卡上,提供管理员帐户和密码,然后服务运行并添加,成功修改注册表值。但是如果我使用wix安装程序安装它,它会安装并成功启动,但服务无法修改注册表项值,可能是它需要管理员权限才能正常工作。

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" AdminImage="yes" InstallPrivileges="elevated" />

<Component Id ="MyServiceInstaller" Guid="{35FB6173-9484-48CA-BA86-30B0A68B301D}">
    <File Id="MyNewService.exe" Name="MyNewService.exe" Source="MyNewService.exe" Vital="yes" KeyPath="yes" DiskId="1"/>
    <ServiceInstall
      Id="ServiceInstaller"
      Type="ownProcess"
      Vital="yes"
      Name="abcService"
      DisplayName="abc Service"
      Description="Monitoring and management service "
      Start="auto"
      Account="LocalMachine"
      ErrorControl="ignore"
      Interactive="no">
      </ServiceInstall>
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="AbcService" Wait="yes" />
  </Component>

请指导我, 谢谢。

【问题讨论】:

  • Administration 是属于 Administrators 组的有效 Windows 用户名吗?您是否尝试过在 ServiceInstall xml 中输入密码?
  • 在理想情况下,服务会在某处报告它无法更新注册表的原因。假设它实际上是那个管理帐户,除非提供密码,否则它将无法工作。如果凭据不正确,我希望该服务在安装过程中启动失败,这可能是您手动添加密码的原因。
  • @PhilDW 管理员不正确,问题是修改实际值为 LocalMachine,服务在做什么,是添加和修改 HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\ Internet Settings\ 密钥,当我在服务属性中设置凭据时,它会修改密钥,否则它不会修改密钥,wix 或服务中是否有任何选项,因此我不应该手动提供凭据。谢谢。

标签: wix wix3.5


【解决方案1】:

服务是否作为 LocalSystem 运行? (你写 LocalMachine - 据我所知,这不是一个有效的帐户)。你是要写信给 HKCU 还是 HKLM?这里的细节有点不清楚。你在处理proxy settings 还是什么?

我不认为 LocalSystem 可以访问 HKCU,但它应该可以在 HKLM 的任何地方写入。我想你应该impersonate the user 这是必需的。

来自 MSDN:“...在 LocalSystem 帐户上下文中运行的服务继承了 SCM 的安全上下文。用户 SID 是根据 SECURITY_LOCAL_SYSTEM_RID 值创建的。该帐户不是与任何已登录的用户帐户相关联。注册表项 HKEY_CURRENT_USER 与默认用户而非当前用户相关联。要访问其他用户的配置文件,请模拟该用户,然后访问 HKEY_CURRENT_USER。"

【讨论】:

    【解决方案2】:

    您无法使用本地系统帐户运行并访问 HKCU 设置。它不是那样工作的。考虑到一台机器上可能有几十个,哪个用户的 HKCU 设置?当您使用实际用户的凭据运行它时它可以工作,因为那时有一个实际用户具有实际的 HKCU 注册表项。除非您使用该用户的凭据运行服务,否则服务不会在特定用户的上下文中运行。您需要先确定用户的 SID,然后才能确定该用户的注册表配置单元。

    【讨论】:

    • 谢谢,我现在正在做的是遍历所有用户 sid 并更改所有用户的 IE 代理设置注册表项,我需要更改当前登录用户的密钥,是有什么方法可以通过 Windows 服务获取当前登录的 SID,如果我尝试通过服务代码,它会给出 S-1-5-18 而不是像这样的 S-1-5-21-2199884586-3455549055-2692760295-1000而且我不知道用户凭据,因为它将安装到许多电脑上。请指导我。
    猜你喜欢
    • 2015-09-26
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多