Windows API StartService ...本地化服务名称
问题描述:
我想用C++程序启动卷影复制服务。这涉及获取服务控制管理器(OpenSCManager)的句柄,使用它获取服务句柄(OpenService),然后启动服务(StartService)。Windows API StartService ...本地化服务名称
但是,我必须将服务名称作为字符串传递给OpenService函数。 VSS服务在我的德语Windows Vista上称为Volumeschattenkopie。有没有办法以任何语言开始正确的服务?我以前没有使用过资源字符串,但是可以通过FindStringResourceEx
或类似的东西获得服务名称?
答
您确定Volumeschattenkopie是德语Vista上的服务名称吗?这绝对是服务显示名称,但OpenService正在查找在CreateService期间使用的名称,该名称可能未被本地化。要找到原始服务名称,请进入服务控制面板,调出您感兴趣的服务的属性。它在顶部显示名称。在我的英文win7框中,Volume Shadow Copy的服务名称是VSS。
答
我的内置Windows帐户(如“NT AUTHORITY \ NETWORK SERVICE”或“NT AUTHORITY \ SYSTEM”)获取本地化名称时遇到同样的问题。 唯一的区别是我在这种情况下使用C#。不过我觉得这不应该是一个问题转移到C++(使用非托管或托管C++?)
这里是我是如何被本地计算机上的本地化“NT AUTHORITY \ NETWORK SERVICE”:
SecurityIdentifier userIdentifer = new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null);
string accountName = userIdentifer.Translate(typeof(NTAccount)).Value;
而且如果我需要'NT AUTHORITY \ SYSTEM',那么我只需使用不同的Sid:
SecurityIdentifier userIdentifer = new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null);
您确定Volumeschattenkopie是德语Vista上的*服务名称*吗?这绝对是*服务显示名称*,但OpenService正在寻找CreateService期间使用的名称,该名称可能未被本地化。 – Jon 2011-03-31 16:43:14
@Jon:谢谢!我懂了。我如何找出服务的原始名称? – 2011-03-31 16:45:38
@Felix进入服务控制面板,调出您感兴趣的服务的属性。它在顶部显示名称。在我的英文win7框中,Volume Shadow Copy的服务名称是VSS – Jon 2011-03-31 16:48:30