#include #include #include #include #include class TestFunction { public: TestFunction() = default; public: void Start() { isRun_ = true; task_ = std::thread([this]() { monitor(); }); } void Exec() { } void monitor() { int counter = 0; while (isRun_) { std::this_thread::sleep_for(std::chrono::seconds(3)); FILE* logFile = fopen("D:\\MyServiceLog.txt", "a"); if (logFile) { fprintf(logFile, "CppService running - Counter: %d\n", counter++); fclose(logFile); } } } void Stop() { std::this_thread::sleep_for(std::chrono::seconds(2)); isRun_ = false; if (task_.joinable()) { task_.join(); } } public: bool isRun_{false}; std::thread task_{}; }; int main(int argc, char* argv[]) { zoostCommon::SetOutputU8(); zoostWinService::serviceName_ = "TaynpgTest"; zoostWinService::dispName_ = "My C++ Windows Service"; TestFunction tf; zoostWinService::exeFunc_ = [&tf]() { tf.Exec(); }; zoostWinService::stopFunc_ = [&tf]() { tf.Stop(); }; if (argc > 1) { std::string command = argv[1]; if (command == "install") { auto r = zoostWinService::WinInstallService(); if (!r) { std::cout << zoostWinService::GetLastErrorMsg() << std::endl; } return r; } else if (command == "uninstall") { return zoostWinService::WinUninstallService(); } else if (command == "run") { // 这里直接执行,用于调试。 return 0; } else { std::cout << zoostWinService::serviceName_ << "服务程序。\n"; std::cout << argv[0]; std::cout << " 参数用法:\n" << " install 安装服务\n" << " uninstall 卸载服务\n" << " run 控制台模式运行\n" << " 直接运行 作为服务启动\n"; return 1; } } // 这里执行 tf.Start(); zoostWinService::WinServiceRun(); return 0; }