#pragma once #ifndef SERVICE_H #define SERVICE_H #include class TFilePath; #include #include //------------------------------------------------------------------------------ #ifdef TFARMAPI #undef TFARMAPI #endif #ifdef _WIN32 #ifdef TFARM_EXPORTS #define TFARMAPI __declspec(dllexport) #else #define TFARMAPI __declspec(dllimport) #endif #else #define TFARMAPI #endif //------------------------------------------------------------------------------ bool ReportStatusToSCMgr(long currentState, long win32ExitCode, long WaitHint); void AddToMessageLog(char *msg); //------------------------------------------------------------------------------ TFARMAPI std::string getLastErrorText(); //------------------------------------------------------------------------------ class TFARMAPI TService { public: TService(const std::string &name, const std::string &displayName); virtual ~TService(); static TService *instance(); enum Status { Stopped = 1, StartPending, StopPending, Running, ContinuePending, PausePending, Paused }; void setStatus(Status status, long exitCode, long waitHint); std::string getName() const; std::string getDisplayName() const; void run(int argc, char *argv[], bool console = false); virtual void onStart(int argc, char *argv[]) = 0; virtual void onStop() = 0; bool isRunningAsConsoleApp() const; static void start(const std::string &name); static void stop(const std::string &name); static void install(const std::string &name, const std::string &displayName, const TFilePath &appPath); static void remove(const std::string &name); static void addToMessageLog(const std::string &msg); static void addToMessageLog(const QString &msg); private: class Imp; std::unique_ptr m_imp; static TService *m_instance; }; #endif