我想使用C++获取正在运行的服务的显示名称。我试图使用GetServiceDisplayName函数,但它似乎并没有工作,不知道为什么。如何获取C++中的服务显示名称?
TTServiceBegin(const char *svcName, PFNSERVICE pfnService, bool *svc, PFNTERMINATE pfnTerm,
int flags, int argc, char *argv[], DWORD dynamiteThreadWaitTime)
{
SC_HANDLE serviceStatusHandle;
DWORD dwSizeNeeded = 0 ;
TCHAR* szKeyName = NULL ;
serviceStatusHandle=OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE ,SC_MANAGER_ALL_ACCESS);
GetServiceDisplayName(serviceStatusHandle,svcName, NULL, &dwSizeNeeded);
if(dwSizeNeeded)
{
szKeyName = new char[dwSizeNeeded+1];
ZeroMemory(szKeyName,dwSizeNeeded+1);
if(GetServiceDisplayName(serviceStatusHandle ,svcName,szKeyName,&dwSizeNeeded)!=0)
{
MessageBox(0,szKeyName,"Got the key name",0);
}
}
当我运行这段代码,怎么看都看szKeyName的价值在我的调试器,它进入的消息框,如果块,但从来没有显示消息框。不知道为什么?
无论如何得到这个工作得到服务的显示名称或任何其他/更简单的方式来完成这项任务?
但不应该它仍然出现,当我只是调试代码?我不能让它显示,当我调试,甚至无法获得szKeyName的值,即使当我看它它说它无法找到指定的符号 – Bullsfan127 2012-07-11 15:44:28
@ Bullsfan127,我不熟悉调试器,所以不能对此评论。我用''TermService''为服务名尝试了它,并正确显示了一个包含'“终端服务”'的消息框。 – hmjd 2012-07-11 15:46:36