diff options
Diffstat (limited to 'src/portable.cpp')
-rw-r--r-- | src/portable.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/portable.cpp b/src/portable.cpp index 2083cbf..7b78439 100644 --- a/src/portable.cpp +++ b/src/portable.cpp @@ -30,7 +30,7 @@ extern char **environ; static double g_sysElapsedTime; static QTime g_time; -int portable_system(const char *command,const char *args,bool commandHasConsole) +int portable_system(const char *command,const char *args,bool commandHasConsole) { if (command==0) return 1; @@ -130,20 +130,23 @@ int portable_system(const char *command,const char *args,bool commandHasConsole // For that case COM is initialized as follows CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); + QString commandw = QString::fromUtf8( command ); + QString argsw = QString::fromUtf8( args ); + // gswin32 is a GUI api which will pop up a window and run // asynchronously. To prevent both, we use ShellExecuteEx and // WaitForSingleObject (thanks to Robert Golias for the code) - SHELLEXECUTEINFO sInfo = { - sizeof(SHELLEXECUTEINFO), /* structure size */ + SHELLEXECUTEINFOW sInfo = { + sizeof(SHELLEXECUTEINFOW), /* structure size */ SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI, /* tell us the process * handle so we can wait till it's done | * do not display msg box if error */ NULL, /* window handle */ NULL, /* action to perform: open */ - command, /* file to execute */ - args, /* argument list */ + (LPCWSTR)commandw.ucs2(), /* file to execute */ + (LPCWSTR)argsw.ucs2(), /* argument list */ NULL, /* use current working dir */ SW_HIDE, /* minimize on start-up */ 0, /* application instance handle */ @@ -154,7 +157,8 @@ int portable_system(const char *command,const char *args,bool commandHasConsole NULL, /* ignored: icon */ NULL /* resulting application handle */ }; - if (!ShellExecuteEx(&sInfo)) + + if (!ShellExecuteExW(&sInfo)) { return -1; } |