Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoć C++ - NT servis

[es] :: C/C++ programiranje :: Pomoć C++ - NT servis

[ Pregleda: 3459 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Pomoć C++ - NT servis29.05.2008. u 17:53 - pre 147 meseci
kako da napravim program koji radi kao servis (NT servis).
program radi kao alarm, ima txt datoteko, gdje napisemo datum,sat i poruko, ki se kasnije javi na ekranu.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4873
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+625 Profil

icon Re: Pomoć C++ - NT servis29.05.2008. u 17:58 - pre 147 meseci
Koje razvojno okruženje ćeš koristiti za razvoj?
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: Pomoć C++ - NT servis29.05.2008. u 18:57 - pre 147 meseci
Program bi trebao biti napisan u Visual C++
našao sam jedan primer NT servisa, sam ne znam kako da u ovaj servis napravim ovaj program
http://www.codersource.net/win32_nt_service.html
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: Pomoć C++ - NT servis30.05.2008. u 09:04 - pre 147 meseci
Pa na tom linku imas kompletan kod i postupak kako da ga napravis
i servis tj., program je napravljen kao konzolna aplikacija ....
Ne znam sad sta ti nije jasno ?

Viva lollapalooza
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: Pomoć C++ - NT servis30.05.2008. u 12:15 - pre 147 meseci
znam da je to kompletan postupak...
nisam neki stručnjak C++, ne znam dje naj upišem kod u ovaj program da radi kao "alarm"
da prečita txt file in javi poruko...

bere txt file: dje je napisan datum, sat i poruka
i na ovaj sat i datum javi poruko... program mora pa radit kao servis.
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: Pomoć C++ - NT servis02.06.2008. u 09:11 - pre 147 meseci
mi može ko dati pomoč da se napravi ovaj program...
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.148.*



+3 Profil

icon Re: Pomoć C++ - NT servis02.06.2008. u 21:28 - pre 147 meseci
Evo ti kod procesa koji upisuje text u log file.

Nadam se da ce ti pomoci. uprostiosam ti maksimalno.

Code:

//  Service.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#define        MAX_NUM_OF_PROCESS        4
/** Window Service **/
VOID ServiceMainProc();
VOID Install(char* pPath, char* pName);
VOID UnInstall(char* pName);
VOID WriteLog(char* pFile, char* pMsg);
BOOL KillService(char* pName);
BOOL RunService(char* pName);
VOID ExecuteSubProcess();
VOID ProcMonitorThread(VOID *);

VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);
VOID WINAPI ServiceHandler(DWORD fdwControl);


/** Window Service **/
const int nBufferSize = 500;
CHAR pServiceName[nBufferSize+1];
CHAR pExeFile[nBufferSize+1];
CHAR lpCmdLineData[nBufferSize+1];
CHAR pLogFile[nBufferSize+1];
BOOL ProcessStarted = TRUE;

CRITICAL_SECTION        myCS;
SERVICE_TABLE_ENTRY        lpServiceStartTable[] = 
{
    {pServiceName, ServiceMain},
    {NULL, NULL}
};

LPTSTR ProcessNames[MAX_NUM_OF_PROCESS];

SERVICE_STATUS_HANDLE   hServiceStatusHandle; 
SERVICE_STATUS          ServiceStatus; 
PROCESS_INFORMATION    pProcInfo[MAX_NUM_OF_PROCESS];

int _tmain(int argc, _TCHAR* argv[])
{
    if(argc >= 2)
        strcpy(lpCmdLineData, argv[1]);
    ServiceMainProc();
    return 0;
}

VOID ServiceMainProc()
{
    ::InitializeCriticalSection(&myCS);
    // initialize variables for .exe and .log file names
    char pModuleFile[nBufferSize+1];
    DWORD dwSize = GetModuleFileName(NULL, pModuleFile, nBufferSize);
    pModuleFile[dwSize] = 0;
    if(dwSize>4 && pModuleFile[dwSize-4] == '.')
    {
        sprintf(pExeFile,"%s",pModuleFile);
        pModuleFile[dwSize-4] = 0;
        sprintf(pLogFile,"%s.log",pModuleFile);
    }
    //Ovde Dodeljujes ime procesu
    strcpy(pServiceName,"SkyDiver");

    if(_stricmp("-i",lpCmdLineData) == 0 || _stricmp("-I",lpCmdLineData) == 0)
        Install(pExeFile, pServiceName);
    else if(_stricmp("-k",lpCmdLineData) == 0 || _stricmp("-K",lpCmdLineData) == 0)
        KillService(pServiceName);
    else if(_stricmp("-u",lpCmdLineData) == 0 || _stricmp("-U",lpCmdLineData) == 0)
        UnInstall(pServiceName);
    else if(_stricmp("-s",lpCmdLineData) == 0 || _stricmp("-S",lpCmdLineData) == 0)
        RunService(pServiceName);
    else
        ExecuteSubProcess();
}

VOID Install(char* pPath, char* pName)
{  
    SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_CREATE_SERVICE); 
    if (schSCManager==0) 
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "OpenSCManager failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
    }
    else
    {
        SC_HANDLE schService = CreateService
        ( 
            schSCManager,    /* SCManager database      */ 
            pName,            /* name of service         */ 
            pName,            /* service name to display */ 
            SERVICE_ALL_ACCESS,        /* desired access          */ 
            SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS , /* service type            */ 
            SERVICE_AUTO_START,      /* start type              */ 
            SERVICE_ERROR_NORMAL,      /* error control type      */ 
            pPath,            /* service's binary        */ 
            NULL,                      /* no load ordering group  */ 
            NULL,                      /* no tag identifier       */ 
            NULL,                      /* no dependencies         */ 
            NULL,                      /* LocalSystem account     */ 
            NULL
        );                     /* no password             */ 
        if (schService==0) 
        {
            long nError =  GetLastError();
            char pTemp[121];
            sprintf(pTemp, "Failed to create service %s, error code = %d\n", pName, nError);
            WriteLog(pLogFile, pTemp);
        }
        else
        {
            char pTemp[121];
            sprintf(pTemp, "Service %s installed\n", pName);
            WriteLog(pLogFile, pTemp);
            CloseServiceHandle(schService); 
        }
        CloseServiceHandle(schSCManager);
    }    
}

VOID UnInstall(char* pName)
{
    SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); 
    if (schSCManager==0) 
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "OpenSCManager failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
    }
    else
    {
        SC_HANDLE schService = OpenService( schSCManager, pName, SERVICE_ALL_ACCESS);
        if (schService==0) 
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "OpenService failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        else
        {
            if(!DeleteService(schService)) 
            {
                char pTemp[121];
                sprintf(pTemp, "Failed to delete service %s\n", pName);
                WriteLog(pLogFile, pTemp);
            }
            else 
            {
                char pTemp[121];
                sprintf(pTemp, "Service %s removed\n",pName);
                WriteLog(pLogFile, pTemp);
            }
            CloseServiceHandle(schService); 
        }
        CloseServiceHandle(schSCManager);    
    }
    DeleteFile(pLogFile);
}

VOID WriteLog(char* pFile, char* pMsg)
{
    // write error or other information into log file
    ::EnterCriticalSection(&myCS);
    try
    {
        SYSTEMTIME oT;
        ::GetLocalTime(&oT);
        FILE* pLog = fopen(pFile,"a");
        fprintf(pLog,"%02d/%02d/%04d, %02d:%02d:%02d\n    %s",oT.wMonth,oT.wDay,oT.wYear,oT.wHour,oT.wMinute,oT.wSecond,pMsg); 
        fclose(pLog);
    } catch(...) {}
    ::LeaveCriticalSection(&myCS);
}

BOOL KillService(char* pName) 

    // kill service with given name
    SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); 
    if (schSCManager==0) 
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "OpenSCManager failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
    }
    else
    {
        // open the service
        SC_HANDLE schService = OpenService( schSCManager, pName, SERVICE_ALL_ACCESS);
        if (schService==0) 
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "OpenService failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        else
        {
            // call ControlService to kill the given service
            SERVICE_STATUS status;
            if(ControlService(schService,SERVICE_CONTROL_STOP,&status))
            {
                CloseServiceHandle(schService); 
                CloseServiceHandle(schSCManager); 
                return TRUE;
            }
            else
            {
                long nError = GetLastError();
                char pTemp[121];
                sprintf(pTemp, "ControlService failed, error code = %d\n", nError);
                WriteLog(pLogFile, pTemp);
            }
            CloseServiceHandle(schService); 
        }
        CloseServiceHandle(schSCManager); 
    }
    return FALSE;
}

BOOL RunService(char* pName) 

    // run service with given name
    SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); 
    if (schSCManager==0) 
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "OpenSCManager failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
    }
    else
    {
        // open the service
        SC_HANDLE schService = OpenService( schSCManager, pName, SERVICE_ALL_ACCESS);
        if (schService==0) 
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "OpenService failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        else
        {
            // call StartService to run the service
            if(StartService(schService, 0, (const char**)NULL))
            {
                CloseServiceHandle(schService); 
                CloseServiceHandle(schSCManager); 
                return TRUE;
            }
            else
            {
                long nError = GetLastError();
                char pTemp[121];
                sprintf(pTemp, "StartService failed, error code = %d\n", nError);
                WriteLog(pLogFile, pTemp);
            }
            CloseServiceHandle(schService); 
        }
        CloseServiceHandle(schSCManager); 
    }
    return FALSE;
}


VOID ExecuteSubProcess()
{
    if(_beginthread(ProcMonitorThread, 0, NULL) == -1)
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "StartService failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
    }
    if(!StartServiceCtrlDispatcher(lpServiceStartTable))
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "StartServiceCtrlDispatcher failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
    }
    ::DeleteCriticalSection(&myCS);
}

VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
    DWORD   status = 0; 
    DWORD   specificError = 0xfffffff; 
 
    ServiceStatus.dwServiceType        = SERVICE_WIN32; 
    ServiceStatus.dwCurrentState       = SERVICE_START_PENDING; 
    ServiceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE; 
    ServiceStatus.dwWin32ExitCode      = 0; 
    ServiceStatus.dwServiceSpecificExitCode = 0; 
    ServiceStatus.dwCheckPoint         = 0; 
    ServiceStatus.dwWaitHint           = 0; 
 
    hServiceStatusHandle = RegisterServiceCtrlHandler(pServiceName, ServiceHandler); 
    if (hServiceStatusHandle==0) 
    {
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "RegisterServiceCtrlHandler failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
        return; 
    } 
 
    // Initialization complete - report running status 
    ServiceStatus.dwCurrentState       = SERVICE_RUNNING; 
    ServiceStatus.dwCheckPoint         = 0; 
    ServiceStatus.dwWaitHint           = 0;  
    if(!SetServiceStatus(hServiceStatusHandle, &ServiceStatus)) 
    { 
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "SetServiceStatus failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
    } 
}

VOID WINAPI ServiceHandler(DWORD fdwControl)
{
    switch(fdwControl) 
    {
        case SERVICE_CONTROL_STOP:
        case SERVICE_CONTROL_SHUTDOWN:
            ProcessStarted = FALSE;
            ServiceStatus.dwWin32ExitCode = 0; 
            ServiceStatus.dwCurrentState  = SERVICE_STOPPED; 
            ServiceStatus.dwCheckPoint    = 0; 
            ServiceStatus.dwWaitHint      = 0;
            break; 
        case SERVICE_CONTROL_PAUSE:
            ServiceStatus.dwCurrentState = SERVICE_PAUSED; 
            break;
        case SERVICE_CONTROL_CONTINUE:
            ServiceStatus.dwCurrentState = SERVICE_RUNNING; 
            break;
        case SERVICE_CONTROL_INTERROGATE:
            break;

    };
    if (!SetServiceStatus(hServiceStatusHandle,  &ServiceStatus)) 
    { 
        long nError = GetLastError();
        char pTemp[121];
        sprintf(pTemp, "SetServiceStatus failed, error code = %d\n", nError);
        WriteLog(pLogFile, pTemp);
    } 
}

VOID ProcMonitorThread(VOID *)
{
    while(ProcessStarted == TRUE)
    {

        //Ovde programiras funkcionalnost procesa
        WriteLog(pLogFile, "Radim nesto u servisu!!!");
        
    }
}
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.148.*



+3 Profil

icon Re: Pomoć C++ - NT servis02.06.2008. u 21:57 - pre 147 meseci
Ups, zaboravio sam da ti napisem kako da koristis .
Kada kompajliras projekat i dobijes imePrograma.exe koristis ga na sledeci nacin:

Startujes cmd, dodjes u folder gde ti se nalazi imePrograma.exe.

za instaliranje otkucas imePrograma.exe -i
za Startovanje imePrograma.exe -s
za stopiranje imePrograma.exe -k
i za uninstall-iranje imePrograma.exe -u

Takodje mozes posle instaliranja da ga stopiras i startujes iz windows-ovog service manager-a.\

pozdrav
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: Pomoć C++ - NT servis03.06.2008. u 14:57 - pre 147 meseci
pokušao sam compile-at pa mi javi: fali datoteka stdafx.h
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.148.*



+3 Profil

icon Re: Pomoć C++ - NT servis03.06.2008. u 18:05 - pre 147 meseci
Ako radis sa Visual Studio-m, kada napravis novi projekat on automatski doda #include "stdafx.h",
to je standardno sa VS-om. Ako radis sa nekim drugim IDE- okruzenjem obrisi slobodnno.

Zaboravio sam da ti navedem biblioteke koje trebas da koristis.

Code:

#include <process.h>
#include <iostream>
#include <tchar.h>
#include <stdio.h>
#include <windows.h>
#include <winbase.h>
#include <winsvc.h>


Ovo ubacis ispred svega. u ovom slucaju umesto #include "stdafx.h".

pozdrav
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: Pomoć C++ - NT servis04.06.2008. u 17:53 - pre 147 meseci
u funkciji sem napisao da mi bere file pa mi svaki put bere in izpisuje ono što je u file-u

VOID ProcMonitorThread(VOID *)
{
while(ProcessStarted == TRUE)
{
//Ovde programiras funkcionalnost procesa
//WriteLog(pLogFile, "Vpsujem servis!!!");

char date [9];
char time [9];
char time_dat [9];
char date_dat [9];

using namespace std;
string line;
ifstream myfile ("Scheduler.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
getline (myfile,line);
cout << line << endl;
}
myfile.close();
}
else
cout << "Unable to open file";
}
}
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
*.ADSL.neobee.net.



+3 Profil

icon Re: Pomoć C++ - NT servis05.06.2008. u 07:57 - pre 147 meseci
Nisam te bas razumeo u cemu je problem.

Nabrzinu sa pogledao kod mislim da je ok.

Jedina zamerka je sto si stavljao cout << "Unable to open file"; tj. ispis u klnzoli, jer ti je to nepotrebno nemozes da vidis sta je ispisao jer je to servis.

Ako imas neki problem pitaj.
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: Pomoć C++ - NT servis05.06.2008. u 09:48 - pre 147 meseci
da to razumijem da ne možeš vidjet sta je ispisao.
kako da bi sad napravio da mi uvijek čita datoteku i na sat (datum) javi poruku ("Napravi ručak!")

datoteka (Scheduler.txt):
06/05/08
14:30:00
Napravi ručak!

VOID ProcMonitorThread(VOID *)
{
while(ProcessStarted == TRUE)
{
//Ovde programiras funkcionalnost procesa
//WriteLog(pLogFile, "Vpsujem servis!!!");

char date [9];
char time [9];
char time_dat [9];
char date_dat [9];
//cout << "Sistemski datum : " << _strdate(date) <<endl;
//cout << "Sistemski sat : " << _strtime(time) <<endl;

using namespace std;
string line;
ifstream myfile ("Scheduler.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
getline (myfile,line);
cout << line << endl;
}

/*do
{
if ( !strcmp(time_dat,time) && !strcmp(date_dat,date) )
//javi poruko ono šta je u datoteki
if(MessageBox(NULL, time, "Poruka!", MB_ICONINFORMATION) ==IDOK)
exit(0);
}
while(time_dat != _strdate(time) && date_dat != _strdate(date));*/

myfile.close();
}
}
}






[Ovu poruku je menjao statquos dana 05.06.2008. u 11:00 GMT+1]

[Ovu poruku je menjao statquos dana 05.06.2008. u 14:18 GMT+1]

[Ovu poruku je menjao statquos dana 05.06.2008. u 14:18 GMT+1]
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
77.46.183.*



+3 Profil

icon Re: Pomoć C++ - NT servis08.06.2008. u 21:42 - pre 147 meseci
To bi moglo da ti prodje sa ovim.

f ( !strcmp(time_dat,time) && !strcmp(date_dat,date) )
//javi poruko ono šta je u datoteki
if(MessageBox(NULL, time, "Poruka!", MB_ICONINFORMATION) ==IDOK)
exit(0);
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: Pomoć C++ - NT servis12.06.2008. u 15:26 - pre 147 meseci
program bi trebao ucitavat datum i sat u datoteki i pogledat sistemski sat i datum
onda bi na ovaj sat i datum ubacil poruko
 
Odgovor na temu

[es] :: C/C++ programiranje :: Pomoć C++ - NT servis

[ Pregleda: 3459 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.