请问能在别的进程里停止注册某种系统服务吗?

seesi 2001-06-27 08:12:06
如果我注册了一个程序为系统服务,请问能在别的进程里访问这个服务,从而中止这个进程吗?我对这个系统服务不了解,望高手们提示一二。
...全文
396 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kevin_qing 2001-06-29
  • 打赏
  • 举报
回复
lu0.126.com
Kevin_qing 2001-06-29
  • 打赏
  • 举报
回复
:)
呵呵
seesi 2001-06-29
  • 打赏
  • 举报
回复
我把分加到最多,给大家了。问题解决,谢谢大家。
seesi 2001-06-29
  • 打赏
  • 举报
回复
to Kevin_qing:
已经收到你的EMail了。我还把问题想复杂了。
Kevin_qing 2001-06-28
  • 打赏
  • 举报
回复
先用。
schSCManager = OpenSCManager(
m_computer_name, // machine (NULL == local)
NULL, // database (NULL == default)
SC_MANAGER_ALL_ACCESS // access required
);//打开servive ctrl manager
schService = OpenService(schSCManager, m_service_name, SERVICE_ALL_ACCESS);//打开Service以访问它。

ControlService( schService, SERVICE_CONTROL_STOP, &ssStatus );//try to stop it

Sleep(1000);

//try ten times
while( timeout > 0 && QueryServiceStatus( schService, &ssStatus ))
{
if ( ssStatus.dwCurrentState != SERVICE_STOPPED)
{
Sleep( 1000 );
timeout -= 1000;
}
else
break;
}//end while()//test result



plato 2001-06-28
  • 打赏
  • 举报
回复
用ControlService停止Service
plato 2001-06-28
  • 打赏
  • 举报
回复
lpServiceName在控制面板里面可以看到
kant 2001-06-28
  • 打赏
  • 举报
回复
请问eggplant
在OpenService函数中,
参数LPCTSTR lpServiceName应该如何写?
是写要控制的服务的进程名吗?
谢谢
seesi 2001-06-28
  • 打赏
  • 举报
回复
more...
如果一个系统服务不能用结束任务结束,可以有办法控制它吗?
seesi 2001-06-28
  • 打赏
  • 举报
回复
好!谢谢。
seesi 2001-06-28
  • 打赏
  • 举报
回复
那个service很霸道,我一看就想把他给干掉。
嘿嘿~~
正在研究中...
建议将洗耳恭听....!
seesi 2001-06-28
  • 打赏
  • 举报
回复
哦,明白了一点。
对对,我是Kevin_qing的想法也。
Kevin_qing 2001-06-28
  • 打赏
  • 举报
回复
大概是想kill别人的service
plato 2001-06-28
  • 打赏
  • 举报
回复
seesi,你的程序是在NT上的Service吗?
你应该用过RegisterServiceCtrlHandler啊,否则你的Service怎么跑得起来?
Kevin_qing 2001-06-28
  • 打赏
  • 举报
回复
就像SendMessage(WM_CLOSE)一样,只是告诉程序需要结束而已,但是它可以忽略你的消息,应该就是这个意思了
plato 2001-06-28
  • 打赏
  • 举报
回复
作为service程序必须要RegisterServiceCtrlHandler,其中一个参数是Handler的处理,
下面是一个Handler的例子:

void CNTService::Handler(DWORD dwOpcode)
{
// Get a pointer to the object
CNTService* pService = m_pThis;

pService->DebugMsg("CNTService::Handler(%lu)", dwOpcode);
switch (dwOpcode) {
case SERVICE_CONTROL_STOP: // 1
pService->SetStatus(SERVICE_STOP_PENDING);
pService->OnStop();
pService->m_bIsRunning = FALSE;
pService->LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_STOPPED);
break;

case SERVICE_CONTROL_PAUSE: // 2
pService->OnPause();
break;

case SERVICE_CONTROL_CONTINUE: // 3
pService->OnContinue();
break;

case SERVICE_CONTROL_INTERROGATE: // 4
pService->OnInterrogate();
break;

case SERVICE_CONTROL_SHUTDOWN: // 5
pService->OnShutdown();
break;

default:
if (dwOpcode >= SERVICE_CONTROL_USER) {
if (!pService->OnUserControl(dwOpcode)) {
pService->LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_BADREQUEST);
}
} else {
pService->LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_BADREQUEST);
}
break;
}

// Report current status
pService->DebugMsg("Updating status (%lu, %lu)",
pService->m_hServiceStatus,
pService->m_Status.dwCurrentState);
::SetServiceStatus(pService->m_hServiceStatus, &pService->m_Status);
}

如果这个Service的Handler程序不响应SERVICE_CONTROL_SHUTDOWN,你关它都关不掉。
seesi 2001-06-28
  • 打赏
  • 举报
回复
谢谢Kevin_qing!
plato(天天)能说详细点么?
Kevin_qing 2001-06-28
  • 打赏
  • 举报
回复
所谓的同时,也就是时间间隔非常短。
用两个连续的调用来kill他们,之后检查进程列表,如果还存在继续kill。
应该就可以达到目的了


或者可以先hook CreateProcess的API,对他们的请求不与处理,应该可以吧



plato 2001-06-28
  • 打赏
  • 举报
回复
ControlService是一个君子协定,如果Service内部不响应你的结束命令,你也拿它没辙
seesi 2001-06-28
  • 打赏
  • 举报
回复
to Kevin_qing:
应该是有多个进程同时,我现在已经看到这种情况。
同时杀掉两个进程?
怎么样同时杀掉,总该有个先后顺序吧?
加载更多回复(8)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧