Форум программистов, компьютерный форум CyberForum.ru

Код службы, которая издает звуковой сигнал в начале каждого часа. Исправить ошибки при компиляции - C++

Восстановить пароль Регистрация
 
kms_box2011
1 / 1 / 0
Регистрация: 07.03.2011
Сообщений: 24
13.05.2012, 18:23     Код службы, которая издает звуковой сигнал в начале каждого часа. Исправить ошибки при компиляции #1
// serv.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"

Нашел исходник на http://dmtsoft.ru/bn/144/as/oneaticleshablon/, как исправить ошибки:
Ошибка 1 error C2664: atoi: невозможно преобразовать параметр 1 из "LPTSTR" в "const char *"
2 IntelliSense: аргумент типа "LPTSTR" несовместим с параметром типа "const char *"

#include <windows.h>
#include <iostream>
#include <string.h>
#include <time.h>
#include <process.h>

SERVICE_STATUS Service1Status;
SERVICE_STATUS_HANDLE Service1StatusHandle;
using namespace std;

int modtime=3600; // звуковой сигнал каждый час
HANDLE thread;
BOOL manual=FALSE;

void ding(void *)
{
time_t timeval;
while (Service1Status.dwCurrentState!=SERVICE_STOPPED)
{
if (Service1Status.dwCurrentState!=SERVICE_PAUSED)
{
time(&timeval);
if (!(timeval%modtime)|| manual)
PlaySound( L"DING", GetModuleHandle( NULL), SND_RESOURCE|SND_SYNC|SND_NOSTOP);
manual=FALSE;
}
Sleep(500);
}
}

VOID __stdcall CtrlHandler (DWORD Opcode)
{
DWORD status;
switch(Opcode)
{
case SERVICE_CONTROL_PAUSE:
// если пауза
Service1Status.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
// если продолжение работы
Service1Status.dwCurrentState = SERVICE_RUNNING;
// блокировать звуковой сигнал
manual=TRUE;
break;
case SERVICE_CONTROL_STOP:
//остановка службы
Service1Status.dwWin32ExitCode = 0;
Service1Status.dwCurrentState = SERVICE_STOPPED;
Service1Status.dwCheckPoint = 0;
Service1Status.dwWaitHint = 0;
if (!SetServiceStatus (Service1StatusHandle,&Service1Status))
{
status = GetLastError();
}
return;
case SERVICE_CONTROL_INTERROGATE:
//Запрашивает текущее состояние службы
break;
default:
// обработка неизвестного кода
// ничего не делать
;
}
// текущее состояние
if (!SetServiceStatus (Service1StatusHandle, &Service1Status))
{
status = GetLastError();
}
return;
}

void __stdcall Service1Start (DWORD argc, LPTSTR *argv)
{
DWORD status;
DWORD specificError;
if (argc>1) modtime=atoi(argv[1]);
if (!modtime) modtime=1;
Service1Status.dwServiceType = SERVICE_WIN32; // тип службы
Service1Status.dwCurrentState = SERVICE_START_PENDING; // состояние службы
//набор флагов, который показывает, какие команды управления обрабатываются службой
Service1Status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE;
Service1Status.dwWin32ExitCode = 0;
Service1Status.dwServiceSpecificExitCode = 0;
Service1Status.dwCheckPoint = 0;
Service1Status.dwWaitHint = 0;
Service1StatusHandle = RegisterServiceCtrlHandler(TEXT("Servicel"), CtrlHandler);
//регистрация функции-обработчика команд службы
if (Service1StatusHandle == (SERVICE_STATUS_HANDLE)0)
{
// ошибка!
return;
}
// Код инициализации переходит сюда
status=NO_ERROR;
// Условие ошибочности
if (status != NO_ERROR)
{
Service1Status.dwCurrentState = SERVICE_STOPPED;
Service1Status.dwCheckPoint = 0;
Service1Status.dwWaitHint =0;
Service1Status.dwWin32ExitCode = status;
Service1Status.dwServiceSpecificExitCode = specificError;
SetServiceStatus (Service1StatusHandle, &Service1Status);
return;
} // Инициализация завершена - доложить о готовности.
Service1Status.dwCurrentState = SERVICE_RUNNING;
Service1Status.dwCheckPoint = 0;
Service1Status.dwWaitHint = 0;
if (!SetServiceStatus (Service1StatusHandle, &Service1Status))
{
status = GetLastError();
// ошибка!
}
// Здесь служба выполняет свою работу.
thread=(HANDLE)_beginthread(ding,0,NULL);
return;
}

void main(int argc, char *argv[])
{
SERVICE_TABLE_ENTRY DispatchTable[] =
{
{
TEXT("Servicel"), //текстовый идентификатор службы
Service1Start //точка входа службы
},
{
NULL,NULL
}
};

if (argc>1 && !stricmp(argv[1],"delete"))
{
//соединяемся с менеджером системных служб
SC_HANDLE scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE);
if (!scm)
{
cout<<"He могу открыть SCM\n";
exit(1);
}
//получаем хэндл службы
SC_HANDLE svc=OpenService(scm,L"service1",DELETE);
if (!svc)
{
cout<<"He могу открыть службу\n";
exit(2);
}
//удаляем службу
if (!DeleteService(svc))
{
cout<<"He могу удалить службу\n";
exit(3);
}
cout<<"Служба удалена\n";
CloseServiceHandle(svc);
CloseServiceHandle(scm);
exit(0);
}

//регистрация службы
if (argc>1 && !stricmp(argv[1], "setup"))
{
char pname[1024];
pname[0]='\"';
//получаем имя файла, которому принадлежит данный процесс
GetModuleFileName(NULL,(LPWSTR)pname+1,1023);
strcat(pname,"\"");
//соединяемся с менеджером системных служб
//тип доступа: Создание новой системной
//службы с помошью CreateService
SC_HANDLE scm=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE),svc;
if (!scm)
{
cout<<"Can't open SCM\n";
exit(1);
}
//создаем новую службу
if (!(svc=CreateService(scm, //handle SCM
L"Service1", //имя службы
L"Service1", //название службы
SERVICE_ALL_ACCESS, //доступ к объекту службы
SERVICE_WIN32_OWN_PROCESS,
//тип службы - Служба Win32, выполняющаяся в

//отдельном процессе
SERVICE_DEMAND_START,
//способ запуска службы: запускается, при вызове

//функции StartService
SERVICE_ERROR_NORMAL,
//реакция на ошибки при загрузке: Программа загрузки

//заносит запись в системный журнал и загрузка продолжается.

//Кроме того, на экран выводится сообщение, что службу не

//удалось запустить
(LPWSTR)pname, //исполняемый файл
NULL, //группа загрузки
NULL, //тег (NULL для служб Win32)
NULL, //зависимости
NULL,
//учетная запись службы (NULL соответствует учетной записи LocalSystem)
NULL
//пароль учетной записи
)))
{
cout<<"Ошибка регистрации!\n";
exit(2);
}
cout<<"Успешно зарегистрирована служба "<<pname<<"\n";
CloseServiceHandle(svc);
CloseServiceHandle(scm);
exit(0);
}
//цикл приема и обработки команд SCM
if (!StartServiceCtrlDispatcher( DispatchTable))
{
// error
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2012, 18:23     Код службы, которая издает звуковой сигнал в начале каждого часа. Исправить ошибки при компиляции
Посмотрите здесь:

Звуковой сигнал \a C++
C++ Ошибки при компиляции
Ошибки при компиляции C++
Ошибки при компиляции C++
C++ Звуковой сигнал при выводе символа
C++ Звуковой сигнал!
C++ Ошибки при компиляции
Ошибки при компиляции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 18:28     Код службы, которая издает звуковой сигнал в начале каждого часа. Исправить ошибки при компиляции #2
Часто встречался с такими ошибками перевода из LPTSTR, LPCSTR уже точно не помню, но был макрос _T()
и по-моему я юзал (LPCSTR)str (где str-char *) когда переводил обратно из char* в LPCSTR + там какой то модуль надо.
Попробуйте поискать, погуглить, я нашёл и вы сможете...
кстати из string в char* переводится так : str.c_str(); (но не в const * char), где str - string
и в юникод не лазайте
Yandex
Объявления
13.05.2012, 18:28     Код службы, которая издает звуковой сигнал в начале каждого часа. Исправить ошибки при компиляции
Ответ Создать тему
Опции темы

Текущее время: 06:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru