int runCommand ( int *result, const char *const *command, HostCommandStream *streams, int asynchronous ) { int ok = 0; char *line = makeWindowsCommandLine(command); if (line) { STARTUPINFO startup; const HandleEntry handleTable[] = { [0] = {.identifier=STD_INPUT_HANDLE , .field=&startup.hStdInput }, [1] = {.identifier=STD_OUTPUT_HANDLE, .field=&startup.hStdOutput},
int installService (const char *name, const char *description) { int installed = 0; const char *const arguments[] = { getProgramPath(), NULL }; char *command = makeWindowsCommandLine(arguments); if (command) { SC_HANDLE scm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (scm) { SC_HANDLE service = CreateService(scm, name, description, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, command, NULL, NULL, NULL, NULL, NULL); if (service) { logMessage(LOG_NOTICE, "service installed: %s", name); installed = 1; CloseServiceHandle(service); } else if (GetLastError() == ERROR_SERVICE_EXISTS) { logMessage(LOG_WARNING, "service already installed: %s", name); installed = 1; } else { logWindowsSystemError("CreateService"); } CloseServiceHandle(scm); } else { logWindowsSystemError("OpenSCManager"); } free(command); } return installed; }