При попытке выгрузить сервис, он выгружается, но только после того как закроется программа. Код (Text): invoke OpenService,hSCManager, OFFSET"servicename", DELETE mov hService,eax .IF eax != 0 invoke SendMessage, hListBox_ResultWork, LB_ADDSTRING, NULL, "Сервис успешно открыт" invoke DeleteService,hService .IF eax != 0 invoke SendMessage, hListBox_ResultWork, LB_ADDSTRING, NULL, OFFSET "Сервис успешно удалён" .ENDIF invoke CloseServiceHandle,hService invoke CloseServiceHandle,hSCManager .ELSE invoke SendMessage, hListBox_ResultWork, LB_ADDSTRING, NULL, OFFSET"Сервиса не существует" .ENDIF Т.е. сервис удаляется только после того как процесс моей программы будет завершён. Это так и должно быть?
Прошу прощения но вроде как он должен убиваться после того как будут закрыты все открытые хэндлы на него указывающие.Те delete помечает его для удаления(можно попытаться снова обратиться к нему и посмотреть GetLastError : выдаст что помечен для уничтожения) а вот после CloseHandleService(hscService) должен умирать. Ну он вроде как должен быть еще остановлен рпи вызове delete...хм
Фактом остаётся то, что он почему то удаляется только после завершения процесса. В MSDN тоже нет намёка на завершение процесса, но ... Я не запускал сервис, просто регистрировал и удалял.
Вы все абсолютно правы. Но реальность такова, что он умирает только после закрытия процесса. :-( И нам придется с этим смириться.
Хм.под умирает вы понимаете удаление данных из реестра (../CurrentControlSet/Services/), базы данных SCM и возвращение из функций без ошибок? Если да, то фигня получается. У меня вся инфа о сервисе удаляется(в описанном выше смысле) после CloseServiceHandle(). Может у вас SCM не имеет прав на удаление? Попробуйте влоб флаги SERVICE_ALL_ACCESS и в OpenSCManager и в OpenService. Может GetLastError после DeleteService и после CloseServiceHandle что полезное подскажет?