Windows API StartService ...本地化服务名称

时间:2011-03-31 16:30:38

标签: c++ localization windows-services

我想用C ++程序启动卷影复制服务。这涉及获取服务控制管理器(OpenSCManager)的句柄,使用此句柄获取服务句柄(OpenService),然后启动服务(StartService)。

但是,我必须将服务名称作为字符串传递给OpenService函数。 VSS服务在我的德语Windows Vista上称为 Volumeschattenkopie 。有没有办法以任何语言启动正确的服务?我之前没有使用过资源字符串,但是可以使用FindStringResourceEx或类似的东西获得服务名称吗?

2 个答案:

答案 0 :(得分:2)

您是否确定Volumeschattenkopie是德国Vista上的服务名称?它绝对是服务显示名称,但OpenService正在查找CreateService期间使用的名称,该名称可能未本地化。要找到原始服务名称,请进入服务控制面板,调出您感兴趣的服务的属性。它在顶部显示名称。在我的英文win7框中,Volume Shadow Copy的服务名称为VSS。

答案 1 :(得分:0)

我在获取内置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);