2014-03-25 65 views
0

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

<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> 

请引导我, Thanx。

+0

管理是属于管理员组的有效Windows用户名吗?您是否尝试过在ServiceInstall xml中输入密码? –

+0

在理想的世界中,服务会在某处报告它无法更新注册表的原因。假设实际上是Admninistration帐户,除非提供密码,否则它不会起作用。我希望服务在安装期间失败启动,如果它的凭据不正确,这可能是你为什么去手动添加密码。 – PhilDW

+0

@PhilDW管理员是不正确的,问题是修改实际值是LocalMachine,什么服务正在做,是它添加和修改HKEY_CURRENT_USER \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Internet Settings \键,当我在它修改密钥的服务属性中设置凭证,否则它不会修改密钥,在wix或服务中是否有任何选项,以便我不应手动提供凭据。感谢名单。 – meraj

回答

0

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

我不认为LocalSystem可以访问HKCU,但它应该能够在HKLM的任何地方写入。我想你应该要求impersonate the user

从MSDN:” ......在LocalSystem帐户的上下文中运行的服务继承SCM的安全上下文SID从SECURITY_LOCAL_SYSTEM_RID值创建的用户帐户不与任何记录相关。 -on user account。注册表项HKEY_CURRENT_USER与默认用户关联,而不是当前用户。要访问其他用户的配置文件,请假冒用户,然后访问HKEY_CURRENT_USER。

0

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

+0

谢谢,我现在在做什么,遍历所有用户的sid并更改所有用户的IE代理设置注册表项,我需要的是更改当前登录用户的密钥,有没有什么方法可以获取当前记录在SID通过Windows服务,如果我试图通过服务代码,它会给S-1-5-18,而不是像这样的S-1-5-21-2199884586-3455549055-2692760295-1000,我不知道用户凭证因为它将安装到许多个电脑。请指导我。 – meraj

相关问题