2011-09-22 5 views
2

Windows 서비스 관리자 대화 상자에서 전달되는 시작 매개 변수를 얻는 방법. 명령 줄 args가 주 함수로 전달 된 것처럼 그들을 얻을 것이라고 기대했다. 서비스를 만들 때QtService가 Service Manager 창에서 시작 매개 변수를 전달하지 않습니다.

enter image description here

나는 그때 메인 함수에 전달 된 인수를 얻을 수 binPath에 인수를 전달합니다.

sc create "Myservice" binPath= "Path_to_exe\Myservice.exe -port 18082" 

그러나 우리는 제거하고 인수를 변경하려면 서비스마다 설치해야 이런 식으로. Qt에서 시작 매개 변수를 가져 오는 방법이 있습니까?

.NET을 사용하여 서비스를 만드는 경우 다음 함수를 사용하여 이러한 시작 매개 변수를 가져올 수 있습니다.

System::Environment::GetCommandLineArgs(); 

답변

1

나는이 질문은 옛 것을 알고 있지만, 답이 유지 방법 요즘, 나는 그것이 가능한 대답을 적절 생각까지 문제가 지속.

당신은 docs에 따르면

void QtServiceBase::createApplication (int & argc, char ** argv)를 재 구현하여 Qt는 서비스의 시작 매개 변수를 얻을 수있을 것입니다 :

This function is only called when no service specific arguments were passed to the service constructor, and is called by exec() before it calls the executeApplication() and start() functions. 

서비스가 시작 함수를 호출 할 때 그래서 인수는 사용할 수

, createApplicationstart 함수보다 먼저 호출되기 때문입니다. 여기

예 :

#include <QtCore> 
#include "qtservice.h" 

class Service : public QtService<QCoreApplication> 
{ 
public: 
    explicit Service(int argc, char *argv[], const QString &name) : QtService<QCoreApplication>(argc, argv, name) 
    { 
     setServiceDescription("Service"); 
     setServiceFlags(QtServiceBase::CanBeSuspended); 
     setStartupType(QtServiceController::ManualStartup); 
    } 

protected: 
    void start() 
    { 
     // use args; 
    } 

    void stop() 
    { 
    } 

    void pause() 
    { 
    } 

    void resume() 
    { 
    } 

    void processCommand(int code) 
    { 
    } 

    void createApplication(int &argc, char **argv) 
    { 
     for (int i = 0; i < argc; i++) 
      args.append(QString(argv[i])); 

     QtService::createApplication(argc, argv); 
    } 
private: 
    QStringList args; 
}; 


int main(int argc, char *argv[]) 
{ 
    Service s(argc, argv, "Service"); 
    return s.exec(); 
} 
관련 문제