2012-06-11 2 views
0

Я пытаюсь преобразовать приложение win32 в службу. Я использую CreateService() для создания приложения как службы (используя код ниже).StartService с аргументом

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    */ 

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

LPCTSTR apszSvcArgv[32] = {"start","passwd"}; 
int nSvcArgc = 2; 
if(StartService(schService, nSvcArgc,apszSvcArgv)) 
{ 
    return TRUE; 
} 

Я попытался сбросить входящий аргумент в основной программе и ее всегда не показывая не аргумент как 1.

Могу ли я делать что-то неправильно ?. Возможно ли передать такой аргумент в консольное приложение win32.

Пожалуйста, поправьте меня, если я ошибаюсь .. Заранее спасибо

+0

Вы не можете просто запустить консольное приложение в качестве сервиса, вызвав магии 'функцию CreateService'. Службы Windows - это специальные типы приложений, разработанные специально как сервисы. –

+0

Спасибо за ваш повтор. Но у меня есть некоторые сомнения, я могу создать и запустить службу, используя то же самое, если аргументов нет. После создания имя службы отображается в списке services.msc и после запуска, это происходит правильно в диспетчере задач. Evan я могу получить доступ к сервису. Я получил этот идеал из http://www.codeproject.com/Articles/16488/A-Windows-Service-Application – DAC84

+2

Просто потому, что вы * умеете * что-то делать, это не значит, что это хорошая идея или вы собираетесь работать , Функция 'CreateService' фактически не * проверяет *, что ваш исполняемый файл был разработан как служба, он просто предполагает, что вы знаете, что вы делаете. Я не знаю, почему вы сомневаетесь в том, что я только что сказал, очевидно, что у вас проблемы с этой работой, как вы ожидаете. Причина в том, что услуги отличаются от обычных приложений. Да, в Интернете есть неправильная информация. В самом первом абзаце связанной статьи происходит критическое непонимание услуг. –

ответ

2

вам нужно определить вектор ARGS константным полукокса (или WCHAR), а затем передать вектор в StartService.

здесь приведен пример программы юникода в VS

const wchar_t *args[] = { L"arg1", L"arg2", L"arg3", L"arg4" }; 
StartService(schService, 4, args); 
Смежные вопросы