Запустить процесс как службу[Какие есть варианты]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cheater_man, 7 Apr 2010.

  1. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    ЯП любой ;)
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну вообще с самого начала нужно писать службу.
    Вообще процесс службы отличается от обычного процесса тока небольшими изменениями в коде. А именно: Регистрации функции службы и регистрации функции контроля.
    Затем служба создается или через специально созданные функции или через реестр. Первый способ более правильный.
    Затем всё запускается через те же функции.

    Смотри 5005 статей по делфи
    1) написание сервиса:
    - Сервисы в Delphi на чистом API
    - Написание сервисов Windows NT на WinAPI
    2) установка сервиса (программно)
    - Инсталляция и удаление сервисов под НТ
    3) управление сервисом
    - Остановка и запуск сервисов

    Если нужно любую прогу запускать, то напиши простенькую службу которая будет запускать твою прогу.

    Если ты обычную прогу запустишь как службу, то система может её выкинуть по таймауту, потому что она не зарегает функции службы и контроля.
    -----------------------
    Еще можно создать службу через реестр. Но винда может не сразу запускать её, а тока после ребута.
    -----------------------
    А вообще что тебе нужно именно?
    - использование контроля?
    - использование прав системы?
    - просто чтобы был такой типа автозапуск?
    - другие вариант?
     
    #2 slesh, 7 Apr 2010
    Last edited: 7 Apr 2010
    3 people like this.
  3. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Нужно прописать свою прогу в сервис(но не через реестр, а с помощью API), и автозапускать её при старте компа.
     
  4. Interceptor

    Interceptor New Member

    Joined:
    6 Apr 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Code:
    SC_HANDLE hSCM = ::OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
    if( hSCM == NULL )
            return FALSE;
    
    SC_HANDLE hService = ::CreateService(
            hSCM, _T("MyServiceName"), _T("MyServiceName"),
            SERVICE_ALL_ACCESS,   SERVICE_WIN32_OWN_PROCESS,
            SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
            _T("Path To Executable"), NULL, NULL, NULL, NULL, NULL);
    
    if( hService )
        ::CloseServiceHandle( hService );
    if( hSCM )
        ::CloseServiceHandle( hSCM );