You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
1.8 KiB
112 lines
1.8 KiB
/* |
|
* Xournal++ |
|
* |
|
* Launcher to start Xournal++ in the correct dir on Windows |
|
* Without this, pressure will not work |
|
* |
|
* @author Xournal++ Team |
|
* https://github.com/xournalpp/xournalpp |
|
* |
|
* @license GNU GPLv2 or later |
|
*/ |
|
|
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
|
|
#include <string> |
|
using std::string; |
|
|
|
#ifdef WIN32 |
|
#include <Windows.h> |
|
#include <direct.h> |
|
#else |
|
#include <unistd.h> |
|
#endif |
|
|
|
string escapeString(const char* str) |
|
{ |
|
string escaped; |
|
|
|
while (*str) |
|
{ |
|
char c = *str; |
|
|
|
if (c == '"') |
|
{ |
|
escaped += "\\\""; |
|
} |
|
else |
|
{ |
|
escaped += c; |
|
} |
|
|
|
str++; |
|
} |
|
|
|
return escaped; |
|
} |
|
|
|
int main(int argc, char* argv[]) |
|
{ |
|
string exePath; |
|
|
|
#ifdef WIN32 |
|
char szFileName[MAX_PATH + 1]; |
|
GetModuleFileNameA(NULL, szFileName, MAX_PATH + 1); |
|
exePath = szFileName; |
|
#else |
|
char result[1024]; |
|
ssize_t count = readlink("/proc/self/exe", result, 1024); |
|
exePath = string(result, (count > 0) ? count : 0); |
|
#endif |
|
|
|
int slashPos = 0; |
|
|
|
for(int i = exePath.size(); i > 0; i--) |
|
{ |
|
if (exePath[i] == '/' || exePath[i] == '\\') |
|
{ |
|
slashPos = i; |
|
break; |
|
} |
|
} |
|
|
|
string folder = exePath.substr(0, slashPos); |
|
|
|
chdir(folder.c_str()); |
|
|
|
string command = "xournalpp_bin.exe"; |
|
|
|
for (int i = 1; i < argc; i++) |
|
{ |
|
MessageBoxA(NULL, argv[i], "Debug IN", 0); |
|
|
|
command += " \""; |
|
command += escapeString(argv[i]); |
|
command += "\""; |
|
} |
|
|
|
|
|
#ifdef WIN32 |
|
STARTUPINFO info = {}; |
|
PROCESS_INFORMATION processInfo; |
|
char* cmd = new char[command.size() + 1]; |
|
strncpy(cmd, command.c_str(), command.size()); |
|
cmd[command.size()] = 0; |
|
// MessageBoxA(NULL, cmd, "Debug", 0); |
|
if (CreateProcessA(NULL, cmd, NULL, NULL, TRUE, 0, NULL, folder.c_str(), &info, &processInfo)) |
|
{ |
|
WaitForSingleObject(processInfo.hProcess, INFINITE); |
|
CloseHandle(processInfo.hProcess); |
|
CloseHandle(processInfo.hThread); |
|
} |
|
|
|
delete cmd; |
|
#else |
|
system(command.c_str()); |
|
#endif |
|
|
|
return 0; |
|
} |
|
|
|
|
|
|