【发布时间】:2012-06-11 20:07:53
【问题描述】:
我正在尝试将一个 win32 应用程序转换为服务。我使用 CreateService() 将它的应用程序创建为服务(使用下面的代码)。
SC_HANDLE schService = CreateService
(
schSCManager, /* SCManager database */
pName, /* name of service */
pName, /* service name to display */
SERVICE_ALL_ACCESS, /* desired access */
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS , /*service type*/
SERVICE_AUTO_START, /* start type */
SERVICE_ERROR_NORMAL, /* error control type */
pPath, /* service's binary */
NULL, /* no load ordering group */
NULL, /* no tag identifier */
NULL, /* no dependencies */
NULL, /* LocalSystem account */
NULL
); /* no password */
如果实际应用程序中没有参数,我可以启动服务。如果我尝试使用参数启动服务,那么它会产生问题。
LPCTSTR apszSvcArgv[32] = {"start","passwd"};
int nSvcArgc = 2;
if(StartService(schService, nSvcArgc,apszSvcArgv))
{
return TRUE;
}
我试图在主程序中转储传入的参数,它总是将参数的编号显示为 1。
我做错什么了吗?是否可以将这样的参数传递给 win32 控制台应用程序。
如果我错了请纠正我..提前谢谢
【问题讨论】:
-
您不能通过调用神奇的
CreateService函数将控制台应用程序作为服务运行。 Windows 服务是特殊类型的应用程序,专门设计为服务。 -
感谢您的重播。但是我有一些疑问,如果没有参数,我可以使用相同的方法创建和启动服务。创建后,服务名称列在 services.msc 中,启动后,它会在任务管理器中正常显示。埃文我能够访问该服务。我从codeproject.com/Articles/16488/A-Windows-Service-Application得到这个想法
-
仅仅因为您能够做某事并不意味着这是一个好主意或可以工作。
CreateService函数实际上并不验证您的可执行文件已被设计为服务,它只是假设您知道自己在做什么。我不知道你为什么怀疑我刚才所说的,很明显你在让这项工作像你期望的那样工作时遇到了问题。原因是服务与典型的应用程序有很大的不同。是的,互联网上有错误的信息。链接文章的第一段表明了对服务的严重误解。 -
谢谢,你能帮我提供一些链接、步骤或示例,通过这些链接,我可以将我的应用程序转换为 Windows 服务。我有一个用 C 编写的 win32 控制台应用程序
标签: c windows visual-c++