首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何判断当前进程(C++、Win32)是否为服务?

如何判断当前进程(C++、Win32)是否为服务?
EN

Stack Overflow用户
提问于 2011-01-07 20:02:16
回答 5查看 2.9K关注 0票数 2

我怎样才能知道我的代码正在运行的应用程序是在服务中还是在应用程序中?为什么我想知道这一点-我正在编写一些注入到目标应用程序中的代码,这些代码无法预先知道这些信息,所以它必须自己解决这个问题。

我不能依赖于从服务控制管理器、启动、停止或命令行参数调用的任何代码。

我目前正在研究GetConsoleWindow(),我希望它能为服务(无控制台)返回NULL,并为任何应用程序(有控制台)返回一个窗口句柄。不确定这个假设有多有效。

有更好的解决方案吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-07 21:25:33

是否从所有正在运行的服务(EnumServicesStatusEx)列表中搜索当前进程id (GetCurrentProcessId)?

票数 7
EN

Stack Overflow用户

发布于 2011-01-08 02:03:10

GetConsoleWindow()的假设无效。

在我看来,您更关心您的流程的上下文。您是在问您的程序是在服务上下文中运行还是在用户会话中运行?如果是这样的话,使用ProcessIdToSessionId() http://msdn.microsoft.com/en-us/library/aa382990%28v=VS.85%29.aspx来获取您的会话id,您将知道它。

票数 1
EN

Stack Overflow用户

发布于 2011-01-11 02:58:28

使用WMI查询“进程to =MyProcessid”的Win32_Service实例。如果没有匹配,那么您的进程就不是服务。

有关在C++ here中创建WMI应用程序的背景信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4625270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档