- if (!CreateProcess(appname.c_str(),
- (char*) ptr_parameters,
- NULL,
- NULL,
- false,
- DETACHED_PROCESS | CREATE_UNICODE_ENVIRONMENT,
- NULL,
- NULL,
- &startupinfo,
- &processinfo)) {
- char buffer[1024];
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
- buffer,
- sizeof(buffer)-1,
- NULL);
+ // Allow calling without an extension
+ std::string app_name = argv[0];
+ if (app_name.compare(app_name.size() - 4, 4, ".exe") != 0)
+ app_name += ".exe";
+
+ STARTUPINFO startup_info = {0};
+ PROCESS_INFORMATION process_info = {0};
+
+ bool success = CreateProcess(app_name.c_str(), (char *)ptr_parameters,
+ NULL, NULL, false, DETACHED_PROCESS | CREATE_UNICODE_ENVIRONMENT,
+ NULL, NULL, &startup_info, &process_info);
+
+ if (success) {
+ exit(0);
+ // NOTREACHED
+ } else {
+ char buffer[1024];
+
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
+ MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), buffer,
+ sizeof(buffer) - 1, NULL);
+