![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сервис [D7, XP]
Levin_610 © (2006-07-14 12:50:00)как зарегестрировать программу, как сервис?
Levin_610 (2006-07-17 12:52:00) [41]я прочиталЮ и вроде бы всё нормально в моей программе - надо было идти в футболисты)
isasa (2006-07-17 12:33:00) [42]Судя по вопросам, все-таки, сходи по ссылке
Leonid Troyanovsky © (14.07.06 22:41) [8]
на rsdn.
Наступит просветление. :)
isasa (2006-07-17 12:31:00) [43]:)
Если по-простому, то
while exitFlag=0 do begin
<делаем что-то>
Sleep(<скоко надо, если надо>);
end;
Или, если хочешь с ним общаться через WM_<message>, то GetMessage в цикле.
Levin_610 (2006-07-17 12:23:00) [44]пожалуйста
Levin_610 (2006-07-17 12:05:00) [45]ссылку на какой-нибудь нормальный готовый класс можешь дать?
Fay (2006-07-17 12:00:00) [46]2 Levin_610 © (17.07.06 11:34) [22]
> что нужнопрописать в основной ф-ции
Предполагается, что ты это уже знаешь.
Не парь мозги, возьми готовый класс службы.
Levin_610 (2006-07-17 11:34:00) [47]а что нужнопрописать в основной ф-ции function MainServiceThread(p: Pointer): DWORD; stdcall;
var hWinSta, hDesktop, hOldWinSta, hOldDesktop: THandle;
begin
sleep(10);
end;
ещё что-то?
Levin_610 (2006-07-17 11:27:00) [48]всё есть - CreateServise
Levin_610 (2006-07-17 11:23:00) [49]вроде та часть программы у меня написана так же, значит проблема не в этом
Fay (2006-07-17 11:08:00) [50]2 Levin_610 © (17.07.06 10:47) 17]
>STANDARD_RIGHTS_REQUIRED
SC_MANAGER_CREATE_SERVICE не лучше? И ваще, где анализ результата выполнения CreateService?
isasa (2006-07-17 10:54:00) [51]Вот фрагмент болванки _tmain сервиса. На D, к сожалению нет, т.к. не юзаю.
Но идея, думаю, будет понятна. API функции -- те-же. Лежать должен в *.dpr, если не ошибаюсь.
TCHAR srvName[] = _T("DiSpy");
TCHAR srvDispName[] = _T("DiSpy Internet Broadband Router Spyer");
threadDataStruct thData;
int _tmain(int argc, _TCHAR* argv[])
{
...
//Service Installing
if(wcscmp(argv[1],L"/i")==0)
{
wprintf(L"Service installing ...\n");
SC_HANDLE schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); // Open SC Manager
if (NULL == schSCManager)
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL );
wprintf(L"OpenSCManager failed. (0x%08X)%s\n", dw, lpMsgBuf);
LocalFree(lpMsgBuf);
return 0;
}
SC_HANDLE schService = CreateService(schSCManager, srvName, srvDispName, SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, thData.szPath,
NULL, NULL, NULL, NULL, NULL);
if (schService == NULL)
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL );
wprintf(L"CreateService failed. (0x%08X)%s\n", dw, lpMsgBuf);
CloseServiceHandle(schSCManager);
LocalFree(lpMsgBuf);
return 0;
}
CloseServiceHandle(schService);
wprintf(L"Service installing succeeded:\n");
wprintf(L"Service display name: \"%s\"\n", srvDispName);
wprintf(L"Service file path: \"%s\"\n", thData.szPath);
return 0;
}
//Service Uninstalling
if(wcscmp(argv[1],L"/u")==0)
{
wprintf(L"Service uninstalling ...\n");
SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); // Open SC Manager
if (NULL == schSCManager)
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL );
wprintf(L"OpenSCManager failed. (0x%08X)%s\n", dw, lpMsgBuf);
LocalFree(lpMsgBuf);
return 0;
}
SC_HANDLE schService = OpenService( schSCManager, srvName, DELETE);
if (schService == NULL)
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL );
wprintf(L"OpenService failed. (0x%08X)%s\n", dw, lpMsgBuf);
CloseServiceHandle(schSCManager);
LocalFree(lpMsgBuf);
return 0;
}
if (!DeleteService(schService))
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL );
wprintf(L"DeleteService failed. (0x%08X)%s\n", dw, lpMsgBuf);
CloseServiceHandle(schSCManager);
CloseServiceHandle(schService);
LocalFree(lpMsgBuf);
return 0;
}
wprintf(L"DeleteService succeeded.\n");
wprintf(L"Service was deleted without error.\n");
CloseServiceHandle(schSCManager);
CloseServiceHandle(schService);
return 0;
}
...
Levin_610 (2006-07-17 10:47:00) [52]последнее высказывание было необходимо) - я делаю так:
hSCMgr := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);
if (hSCMgr <> 0) then
begin
hNewService := CreateService(hSCMgr, PChar(ServiceName), PChar(ServiceName),
STANDARD_RIGHTS_REQUIRED, SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
PChar(ExecutablePath), nil, nil, nil, nil, nil);
- это все, что нужно, чтобы SCM зарегистрировал службу? или нужно ещё что-то? Или может в этом коде есть ошибка?
Fay (2006-07-17 10:38:00) [53]2 Levin_610 © (17.07.06 10:27) [15]
Значит не дошёл
Levin_610 (2006-07-17 10:27:00) [54]до этого я уже дошёл, я вроде прошу, но видимо как-то не так)
Ketmar (2006-07-17 10:25:00) [55]попросить SCM зарегистрировать. %-)
Levin_610 (2006-07-17 09:29:00) [56]у меня почему-то не заходило, под моим ником, а просто_Мария полезный ник), я написал программу, как сервис, но как прописать, чтобы она регистрировалась?
Leonid Troyanovsky (2006-07-14 23:25:00) [57]
> Leonid Troyanovsky © (14.07.06 23:21) [11]
> Я могу предложить версии, если ты поделишься
> основаниями для идентефикации.
Так основания шиты белыми нитками,
то, делится версиями я не буду, sorry.
--
Regards, LVT.
Leonid Troyanovsky (2006-07-14 23:21:00) [58]
> isasa © (14.07.06 23:19) [10]
> Да еще такие разные?
Я могу предложить версии, если ты поделишься
основаниями для идентефикации.
--
Regards, LVT.
isasa (2006-07-14 23:19:00) [59]OFFTOP
Чистое любопытство. Зачем два ника?
Levin_610 ©
prosto_Maria ©
Да еще такие разные?
isasa (2006-07-14 23:13:00) [60]prosto_Maria © (14.07.06 16:09) [4]
там есть функция ServiceInitialization, что она делает и как её описать?
Очередной переписчик этой "библии" забыл ее закоментировать. Эта функция может быть написана(а может и нет) пользователем для инициализации каких-нибудь данных сервиса. Показывает место, где это уместно делать. В коментарий ее.