Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Вниз

Сервис   Найти похожие ветки 

 
Levin_610 ©   (2006-07-14 12:50) [0]

как зарегестрировать программу, как сервис?


 
sniknik ©   (2006-07-14 12:53) [1]

выполнить с параметром /install (если конечно она написана именно как сервис)


 
isasa ©   (2006-07-14 13:03) [2]

http://www.ishodniki.ru/art/artshow.php?id=90&cat=1&show=delphi

вот эта штука повторяется в нете n-раз.
Если сделать как там, то, по моему, параметр /i :)


 
Levin_610 ©   (2006-07-14 13:22) [3]

спасибо


 
prosto_Maria ©   (2006-07-14 16:09) [4]

там есть функция ServiceInitialization, что она делает и как её описать?


 
novill ©   (2006-07-14 16:22) [5]


> prosto_Maria ©   (14.07.06 16:09) [4]
> там есть функция ServiceInitialization

"Там" - Это где? :)


 
prosto_Maria ©   (2006-07-14 16:40) [6]

http://www.ishodniki.ru/art/artshow.php?id=90&cat=1&show=delphi


 
Пусик ©   (2006-07-14 22:23) [7]


> Levin_610 ©   (14.07.06 12:50) 


srvany.exe из пакета Resouce Kit. Позволит запустить программу как сервис.

http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en

либо ищи отдельно 3 файла:
instsrv.exe
srvany.exe
srvany.wri (инструкция).


 
Leonid Troyanovsky ©   (2006-07-14 22:41) [8]


> prosto_Maria ©   (14.07.06 16:40) [6]


Видишь ли, Маша (ничего, если я запросто?)
Для того, чтобы зарегистрировать прилож aka service,
она д.б. написана aka service. О чем уже ранее было и сказано.

Подробности можно найти на

http://rsdn.ru/?article/baseserv/svcadmin-1.xml & etc

--
Regards, LVT.


 
isasa ©   (2006-07-14 23:13) [9]

prosto_Maria ©   (14.07.06 16:09) [4]

там есть функция ServiceInitialization, что она делает и как её описать?


Очередной переписчик этой "библии" забыл ее закоментировать. Эта функция может быть написана(а может и нет) пользователем для инициализации каких-нибудь данных сервиса. Показывает место, где это уместно делать. В коментарий ее.


 
isasa ©   (2006-07-14 23:19) [10]

OFFTOP
Чистое любопытство. Зачем два ника?
Levin_610 ©
prosto_Maria ©

Да еще такие разные?


 
Leonid Troyanovsky ©   (2006-07-14 23:21) [11]


> isasa ©   (14.07.06 23:19) [10]

> Да еще такие разные?


Я могу предложить версии, если ты поделишься
основаниями для идентефикации.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2006-07-14 23:25) [12]


> Leonid Troyanovsky ©   (14.07.06 23:21) [11]

> Я могу предложить версии, если ты поделишься
> основаниями для идентефикации.


Так основания шиты белыми нитками,
то, делится версиями я не буду, sorry.

--
Regards, LVT.


 
Levin_610 ©   (2006-07-17 09:29) [13]

у меня почему-то не заходило, под моим ником, а просто_Мария полезный ник), я написал программу, как сервис, но как прописать, чтобы она регистрировалась?


 
Ketmar ©   (2006-07-17 10:25) [14]

попросить SCM зарегистрировать. %-)


 
Levin_610 ©   (2006-07-17 10:27) [15]

до этого я уже дошёл, я вроде прошу, но видимо как-то не так)


 
Fay ©   (2006-07-17 10:38) [16]

2 Levin_610 ©   (17.07.06 10:27) [15]
Значит не дошёл


 
Levin_610 ©   (2006-07-17 10:47) [17]

последнее высказывание было необходимо) - я делаю так:
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 зарегистрировал службу? или нужно ещё что-то? Или может в этом коде есть ошибка?


 
isasa ©   (2006-07-17 10:54) [18]

Вот фрагмент болванки _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;
     }
...


 
Fay ©   (2006-07-17 11:08) [19]

2 Levin_610 ©   (17.07.06 10:47) 17]
> STANDARD_RIGHTS_REQUIRED
SC_MANAGER_CREATE_SERVICE не лучше? И ваще, где анализ результата выполнения CreateService?


 
Levin_610 ©   (2006-07-17 11:23) [20]

вроде та часть программы у меня написана так же, значит проблема не в этом


 
Levin_610 ©   (2006-07-17 11:27) [21]

всё есть - CreateServise


 
Levin_610 ©   (2006-07-17 11:34) [22]

а что нужнопрописать в основной ф-ции function MainServiceThread(p: Pointer): DWORD; stdcall;
 var hWinSta, hDesktop, hOldWinSta, hOldDesktop: THandle;
begin
 sleep(10);
end;
ещё что-то?


 
Fay ©   (2006-07-17 12:00) [23]

2 Levin_610 ©   (17.07.06 11:34) [22]
>  что нужнопрописать в основной ф-ции
Предполагается, что ты это уже знаешь.
Не парь мозги, возьми готовый класс службы.


 
Levin_610 ©   (2006-07-17 12:05) [24]

ссылку на какой-нибудь нормальный готовый класс можешь дать?


 
Levin_610 ©   (2006-07-17 12:23) [25]

пожалуйста


 
isasa ©   (2006-07-17 12:31) [26]

:)
Если по-простому, то

while exitFlag=0 do begin
 <делаем что-то>
 Sleep(<скоко надо, если надо>);
end;

Или, если хочешь с ним общаться через WM_<message>, то GetMessage в цикле.


 
isasa ©   (2006-07-17 12:33) [27]

Судя по вопросам, все-таки, сходи по ссылке
Leonid Troyanovsky ©   (14.07.06 22:41) [8]
на rsdn.
Наступит просветление. :)


 
Levin_610 ©   (2006-07-17 12:52) [28]

я прочиталЮ и вроде бы всё нормально в моей программе - надо было идти в футболисты)


 
Fay ©   (2006-07-17 14:40) [29]

2 Levin_610 ©   (17.07.06 12:52) [28]
Что возвращает CreateService?


 
Пусик ©   (2006-07-17 14:48) [30]


> Levin_610 ©   (17.07.06 12:05) [24]
> ссылку на какой-нибудь нормальный готовый класс можешь дать?
>


Вот рабочий код.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
 ExtCtrls;

type

 TThreadTimer=class(TThread)
 protected
   FS: TFileStream;
   procedure Execute; override;
 end;

 TTwoService = class(TService)
   procedure ServiceExecute(Sender: TService);
   procedure ServiceStart(Sender: TService; var Started: Boolean);
   procedure ServiceStop(Sender: TService; var Stopped: Boolean);
   procedure ServiceContinue(Sender: TService; var Continued: Boolean);
   procedure ServicePause(Sender: TService; var Paused: Boolean);
 private
   { Private declarations }
 public
   function GetServiceController: TServiceController; override;
   { Public declarations }
 end;

var
 TwoService: TTwoService;
 ThrTimer: TThreadTimer;

implementation

{$R *.DFM}

{TTwoService}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
 TwoService.Controller(CtrlCode);
end;

function TTwoService.GetServiceController: TServiceController;
begin
 Result := ServiceController;
end;

procedure TTwoService.ServiceExecute(Sender: TService);
begin
   while not terminated do
   begin
     ServiceThread.ProcessRequests(True);
   end;
end;

procedure TTwoService.ServiceStart(Sender: TService; var Started: Boolean);
begin
 ThrTimer := TThreadTimer.Create(True);
 ThrTimer.FreeOnTerminate := True;
 try
   if not FileExists("c:\log.tmp") then
   begin
     ThrTimer.FS := TFileStream.Create("c:\log.tmp",fmCreate or fmShareDenyWrite);
     ThrTimer.FS.Free;
   end;
   ThrTimer.FS := TFileStream.Create("c:\log.tmp",fmOpenReadWrite or fmShareDenyWrite);

   Started := True;
 except
   ThrTimer.Terminate;
   Started := False;
 end;
 ThrTimer.Resume;
end;

procedure TTwoService.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
 ThrTimer.Terminate;
 ThrTimer.Resume;
 Stopped := True;
end;

procedure TTwoService.ServiceContinue(Sender: TService;
 var Continued: Boolean);
begin
 ThrTimer.Resume;
 Continued := True;
end;

procedure TTwoService.ServicePause(Sender: TService; var Paused: Boolean);
begin
ThrTimer.Suspend;
Paused := True;
end;

{ TThreadTimer }

procedure TThreadTimer.Execute;
var
 s: String;
begin
 while not Terminated do
 begin
   try
     s := FormatDateTime("hh:nn:ss",Now)+#13#10;
     FS.Write(s[1],Length(s));
     Sleep(1000);
   except
   end;
 end;
 FS.Free;
end;

end.


 
Fay ©   (2006-07-17 14:54) [31]

2 Пусик ©   (17.07.06 14:48) [30]
if not FileExists("c:\log.tmp") then
  begin
    ThrTimer.FS := TFileStream.Create("c:\log.tmp",fmCreate or fmShareDenyWrite);
    ThrTimer.FS.Free;
  end;
  ThrTimer.FS := TFileStream.Create("c:\log.tmp",fmOpenReadWrite or fmShareDenyWrite);


что это за порнография?


 
Пусик ©   (2006-07-17 15:12) [32]


> Fay ©   (17.07.06 14:54) [31]
> 2 Пусик ©   (17.07.06 14:48) [30]if not FileExists("c:\log.
> tmp") then   begin     ThrTimer.FS := TFileStream.Create("c:
> \log.tmp",fmCreate or fmShareDenyWrite);     ThrTimer.FS.
> Free;   end;   ThrTimer.FS := TFileStream.Create("c:\log.
> tmp",fmOpenReadWrite or fmShareDenyWrite);что это за порнография?
>


Внимательней код изучай.


 
DrPass ©   (2006-07-17 15:14) [33]

А почему не
if not FileExists("c:\log.tmp") then
   ThrTimer.FS := TFileStream.Create("c:\log.tmp",fmCreate or fmShareDenyWrite)
else
 ThrTimer.FS := TFileStream.Create("c:\log.tmp",fmOpenReadWrite or fmShareDenyWrite);
?


 
Fay ©   (2006-07-17 15:18) [34]

2 Пусик ©   (17.07.06 15:12) [32]
> Внимательней код изучай.
Я изучил. Порнография в чистом виде.


 
Пусик ©   (2006-07-17 15:29) [35]


> Fay ©   (17.07.06 15:18) [34]
> 2 Пусик ©   (17.07.06 15:12) [32]> Внимательней код изучай.
> Я изучил. Порнография в чистом виде


Вот иди и займись ей(порнографией).


> DrPass ©   (17.07.06 15:14) [33]


Дело в том, что при TFileStream.Create("c:\log.tmp",fmCreate or fmShareDenyWrite) нужный эффект(доступ на чтение из других программ) не будет достигнут.


 
Пусик ©   (2006-07-17 15:31) [36]

> DrPass ©   (17.07.06 15:14) [33]

Да и не в том вопрос. Приведен рабочий пример. Как и просил человек.
А все вокруг - излишне.


 
Игорь Шевченко ©   (2006-07-17 17:10) [37]

Порнография на самом деле находится в SysUtils, не позволяющая передать в функцию FileCreate параметр режима разделения доступа.


 
Fay ©   (2006-07-17 17:13) [38]

2 Пусик ©   (17.07.06 15:29) [35]
> Дело в том, что при TFileStream.Create
А CreateFile не судьба?


 
Пусик ©   (2006-07-17 17:14) [39]


> Fay ©   (17.07.06 17:13) [38]
> 2 Пусик ©   (17.07.06 15:29) [35]> Дело в том, что при TFileStream.
> CreateА CreateFile не судьба?


А прежде подумать, а потом говорить, тоже не судьба?


 
Игорь Шевченко ©   (2006-07-17 17:20) [40]


> ThrTimer.FS := TFileStream.Create("c:\log.tmp",fmCreate
> or fmShareDenyWrite);


or fmShareDenyWrite - лишнее. fmCreate равен $FFFF



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.02 c
15-1152554385
Ломброзо
2006-07-10 21:59
2006.08.06
EAN-13


15-1151928395
СБСОФТ
2006-07-03 16:06
2006.08.06
СБСОФТ: Вакансии (программист Delphi Firebird)


2-1153305041
VitGun
2006-07-19 14:30
2006.08.06
Shell Extension. Как?


15-1152268054
sam11
2006-07-07 14:27
2006.08.06
Контейнер графических объектов


2-1153322064
Константинов
2006-07-19 19:14
2006.08.06
Консольное приложение нечитаемые символы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский