NT 계열에서는 외부에서 개별적으로 죽이는건 불가능 하다네요. 그리고, 아래 코드를 한번 참고해 보시구.. 필요한 부분이 있으시면 참고해 보시는건 어떠실지요.. Service 에 관한 부분은 저두 잘 모르구.. 뉴스그룹이나 아는 사람에게 물어보고는 있는데.. 시원한 답변을 얻기는 힘드네요.. (제가 잘 몰라서 이해가 잘 안되서 그런가 봅니다.. -_-a)
그리고. 메세지 처리는 어떠실지요. 그냥 제 생각인데.. 메세지가 온다면 서비스 내에서 죽이는 식으로는 어떠실지요.. 메세지 처리 부분은 요청하시면 참고 소스를 올려드리겠습니다.
아 그리구요..
http://www.wilsonc.demon.co.uk/delphi.htm 에.. 프로세스에 관련된 몇몇 델파이 소스가 있습니다.
For starters, it might be a good idea to post your NEW code, not the
original code you already posted before.
Personally, I think you're going to make things more complicated on yourself
moving to WaitForMultipleObjects(), because it's not really needed. Your
new thread shouldn't need to worry about the SCM at al, that's the service's
job. Your new thread has only one job - monitor the directories. You
should leave it at that. In your loop, don't use INFINITE, but rather an
actual timeout value, that way the thread can periodically check it's
Terminated flag. For example:
void __fastcall TMyThread::Execute()
{
HANDLE hWait=FindFirstChangeNotification(
"C:\\TEMP", //directory monitored
TRUE, //recursive?
FILE_NOTIFY_CHANGE_FILE_NAME); //DWORD flags
/* Main loop that waits for notifications */
while(!Terminated)
{
DWORD dwRet=WaitForSingleObject(hWait, 1000);
if(!Terminated)
{
if(dwRet==WAIT_OBJECT_0)
sendMail();
FindNextChangeNotification(hWait);
}
}
FindCloseChangeNotification(hWait);
}
Gambit
저비... 님이 쓰신 글 :
: 안녕하세요. 서비스의 OnExecute 함수에서 어떤 프로그램을 ShellExecute 로 실행을 했습니다.
: 그리고 나서 작업관리자를 보면 서비스 프로세스와 서비스에서 실행한 프로세스가 뜹니다..
: 그리고 나서 서비스에서 실행한 프로세스를 죽이게 되면 첨에는 잘 죽습니다..
: 그러니까 서비스 프로그램을 install 할때 바로 실행하도록 프로그램을 하여 실행하면 서비스에서
: 실행한 프로세스은 프로세스를 죽이게 되면 바로 죽는데 문제는 재부팅을 하고 나서 서비스에서 실행하는 프로세스는 서비스를 내려도 안죽고 그냥 죽여도 안죽습니다..
:
: 서비스에서 실행한 프로세스를 죽일수 있는 방법이 없나요 ..? 아시는 분은 답변을 바랍니다..
:
: 요약을 하자면 서비스의 Execute 함수에서
:
: void __fastcall Tnpschedule::ServiceExecute(TService *Sender)
: {
: while (!Terminated) {
: hDaemon = FindWindow(NULL, "XXX");
: if (!hDaemon)
: ShellExecute(NULL, "open", "c:\aaa.exe", NULL, NULL, SW_SHOW);
: ::Sleep(10 * 1000);
: ServiceThread->ProcessRequests(false);
: }
:
: 이런식으로 실행한 aaa.exe 라는 프로세스가 컴퓨터 부팅후에 실행되는 서비스에 의해서 실행이
: 되고 나서는 프로세스를 죽일수가 없습니다..
: 프로세스를 죽일수 있는 방법을 알고 싶습니다.
: 감사합니다.
:
:
: