如何检测进程是否作为服务进行安装

时间:2015-10-08 18:45:58

标签: c windows

我创建了一个应该作为服务和应用程序运行的win32应用程序。 当我单击并运行它时,它应该作为应用程序运行。当从服务控制器调用时,它应该检测到它并且分支作为服务运行。如何在不传递参数的情况下检测到这一点? mr.abzadeh

1 个答案:

答案 0 :(得分:2)

传统(最简单)的方法是调用StartServiceCtrlDispatcher(),如果失败,则假定您不是作为服务运行。这在实践中运作良好,但从技术上讲,我不相信微软会保证它会这样做。

如果您想要更强大的方法,可以examine your security token查看它是否包含Service SID,S-1-5-6。但是,为了实现此目的,您必须确保使用non-zero SID type配置服务,即SERVICE_SID_TYPE_UNRESTRICTEDSERVICE_SID_TYPE_RESTRICTED

注意:我试图回答所写的问题,但更好的解决方案是设置命令行参数,如评论中所述。您可以在CreateService()的lpBinaryPathName参数中包含命令行参数。 main()函数将以与普通命令行应用程序相同的方式接收这些参数。