static int service_run(int log_to_file, int debug) { SERVICE_TABLE_ENTRY service_table[2]; int rc; service_table[0].lpServiceName = service_get_name(); service_table[0].lpServiceProc = service_main; service_table[1].lpServiceName = NULL; service_table[1].lpServiceProc = NULL; if (!StartServiceCtrlDispatcher(service_table)) { rc = ERRNO_WINAPI_OFFSET + GetLastError(); if (rc == ERRNO_WINAPI_OFFSET + ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) { log_info("Could not start as service, starting as console application"); _run_as_service = 0; _pause_before_exit = started_by_explorer(); return generic_main(log_to_file, debug); } else { log_error("Could not start service control dispatcher: %s (%d)", get_errno_name(rc), rc); log_exit(); config_exit(); return EXIT_FAILURE; } } return EXIT_SUCCESS; }
static void WINAPI service_main(DWORD argc, LPTSTR *argv) { DWORD i; int log_to_file = 0; int debug = 0; for (i = 1; i < argc; ++i) { if (strcmp(argv[i], "--log-to-file") == 0) { log_to_file = 1; } else if (strcmp(argv[i], "--debug") == 0) { debug = 1; } else { log_warn("Unknown start parameter '%s'", argv[i]); } } generic_main(log_to_file, debug); }
static void WINAPI service_main(DWORD argc, LPTSTR *argv) { DWORD i; bool log_to_file = false; bool debug = false; bool libusb_debug = false; for (i = 1; i < argc; ++i) { if (strcmp(argv[i], "--log-to-file") == 0) { log_to_file = true; } else if (strcmp(argv[i], "--debug") == 0) { debug = true; } else if (strcmp(argv[i], "--libusb-debug") == 0) { libusb_debug = true; } else { log_warn("Unknown start parameter '%s'", argv[i]); } } generic_main(log_to_file, debug, libusb_debug); }
int main(int argc, char **argv) { int i; int help = 0; int version = 0; int check_config = 0; int install = 0; int uninstall = 0; int console = 0; int log_to_file = 0; int debug = 0; int rc; for (i = 1; i < argc; ++i) { if (strcmp(argv[i], "--help") == 0) { help = 1; } else if (strcmp(argv[i], "--version") == 0) { version = 1; } else if (strcmp(argv[i], "--check-config") == 0) { check_config = 1; } else if (strcmp(argv[i], "--install") == 0) { install = 1; } else if (strcmp(argv[i], "--uninstall") == 0) { uninstall = 1; } else if (strcmp(argv[i], "--console") == 0) { console = 1; } else if (strcmp(argv[i], "--log-to-file") == 0) { log_to_file = 1; } else if (strcmp(argv[i], "--debug") == 0) { debug = 1; } else { fprintf(stderr, "Unknown option '%s'\n\n", argv[i]); print_usage(); return EXIT_FAILURE; } } if (help) { print_usage(); return EXIT_SUCCESS; } if (version) { printf("%s\n", VERSION_STRING); return EXIT_SUCCESS; } if (GetModuleFileName(NULL, _config_filename, sizeof(_config_filename)) == 0) { rc = ERRNO_WINAPI_OFFSET + GetLastError(); fprintf(stderr, "Could not get module file name: %s (%d)\n", get_errno_name(rc), rc); return EXIT_FAILURE; } i = strlen(_config_filename); if (i < 4) { fprintf(stderr, "Module file name '%s' is too short", _config_filename); return EXIT_FAILURE; } strcpy(_config_filename + i - 3, "ini"); if (check_config) { return config_check(_config_filename) < 0 ? EXIT_FAILURE : EXIT_SUCCESS; } if (install && uninstall) { fprintf(stderr, "Invalid option combination\n"); print_usage(); return EXIT_FAILURE; } if (install) { if (service_install(log_to_file, debug) < 0) { return EXIT_FAILURE; } } else if (uninstall) { if (service_uninstall() < 0) { return EXIT_FAILURE; } } else { printf("Starting...\n"); config_init(_config_filename); log_init(); if (console) { _run_as_service = 0; _pause_before_exit = started_by_explorer(); return generic_main(log_to_file, debug); } else { return service_run(log_to_file, debug); } } return EXIT_SUCCESS; }
int main(int argc, char **argv) { int i; bool help = false; bool version = false; bool check_config = false; bool install = false; bool uninstall = false; bool console = false; bool log_to_file = false; bool debug = false; bool libusb_debug = false; int rc; fixes_init(); for (i = 1; i < argc; ++i) { if (strcmp(argv[i], "--help") == 0) { help = true; } else if (strcmp(argv[i], "--version") == 0) { version = true; } else if (strcmp(argv[i], "--check-config") == 0) { check_config = true; } else if (strcmp(argv[i], "--install") == 0) { install = true; } else if (strcmp(argv[i], "--uninstall") == 0) { uninstall = true; } else if (strcmp(argv[i], "--console") == 0) { console = true; } else if (strcmp(argv[i], "--log-to-file") == 0) { log_to_file = true; } else if (strcmp(argv[i], "--debug") == 0) { debug = true; } else if (strcmp(argv[i], "--libusb-debug") == 0) { libusb_debug = true; } else { fprintf(stderr, "Unknown option '%s'\n\n", argv[i]); print_usage(); return EXIT_FAILURE; } } if (help) { print_usage(); return EXIT_SUCCESS; } if (version) { print_version(); return EXIT_SUCCESS; } if (GetModuleFileName(NULL, _config_filename, sizeof(_config_filename)) == 0) { rc = ERRNO_WINAPI_OFFSET + GetLastError(); fprintf(stderr, "Could not get module file name: %s (%d)\n", get_errno_name(rc), rc); return EXIT_FAILURE; } i = strlen(_config_filename); if (i < 4) { fprintf(stderr, "Module file name '%s' is too short", _config_filename); return EXIT_FAILURE; } _config_filename[i - 3] = '\0'; string_append(_config_filename, "ini", sizeof(_config_filename)); if (check_config) { rc = config_check(_config_filename); if (started_by_explorer(false)) { printf("\nPress any key to exit...\n"); getch(); } return rc < 0 ? EXIT_FAILURE : EXIT_SUCCESS; } if (install && uninstall) { fprintf(stderr, "Invalid option combination\n"); print_usage(); return EXIT_FAILURE; } if (install) { if (service_install(log_to_file, debug) < 0) { return EXIT_FAILURE; } } else if (uninstall) { if (service_uninstall() < 0) { return EXIT_FAILURE; } } else { printf("Starting...\n"); config_init(_config_filename); log_init(); if (console) { _run_as_service = false; _pause_before_exit = started_by_explorer(true); return generic_main(log_to_file, debug, libusb_debug); } else { return service_run(log_to_file, debug, libusb_debug); } } return EXIT_SUCCESS; }