0

win32 アプリケーションをサービスに変換しようとしています。CreateService() を使用して、アプリケーションをサービスとして作成します (以下のコードを使用)。

    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 コンソール アプリケーションに渡すことは可能ですか。

私が間違っている場合は修正してください..事前に感謝します

4

1 に答える 1

2

args ベクトルを const char (または wchar) として定義し、そのベクトルを StartService に渡す必要があります。

これはVSのユニコードプログラムの例です

const wchar_t *args[] = { L"arg1", L"arg2", L"arg3", L"arg4" };
StartService(schService, 4, args);
于 2015-12-28T10:48:33.417 に答える