[PATCH 7 of 7] (issue36) Use 8 bit encoding for cinst process start

Wald Commits scm-commit at wald.intevation.org
Thu Sep 18 15:47:21 CEST 2014


# HG changeset patch
# User Andre Heinecke <andre.heinecke at intevation.de>
# Date 1411048009 -7200
# Node ID 0ddb173bcd8bdb8738e0ef5dc16992fc01dfe89d
# Parent  ffdc8cba139a8adf7ddf4caf857c1e2dcbd2098d
(issue36) Use 8 bit encoding for cinst process start

diff -r ffdc8cba139a -r 0ddb173bcd8b ui/installwrapper.cpp
--- a/ui/installwrapper.cpp	Thu Sep 18 15:43:48 2014 +0200
+++ b/ui/installwrapper.cpp	Thu Sep 18 15:46:49 2014 +0200
@@ -97,9 +97,9 @@
      * and not a pipe for communication. In debug mode the installer
      * also makes use of output debug string. */
     DWORD retval = 0;
-    SHELLEXECUTEINFOW shExecInfo;
+    SHELLEXECUTEINFOA shExecInfo;
 
-    memset (&shExecInfo, 0, sizeof(SHELLEXECUTEINFOW));
+    memset (&shExecInfo, 0, sizeof(SHELLEXECUTEINFOA));
 
     /* Windows needs each parameter packed in " */
     QString parameters = "\"list=" + mCertListFile +
@@ -109,29 +109,36 @@
         parameters += " --debug";
     }
 
-    shExecInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
+    shExecInfo.cbSize = sizeof(SHELLEXECUTEINFOA);
     shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
     if (!is_system_install()) {
-        shExecInfo.lpVerb = L"open";
+        shExecInfo.lpVerb = "open";
     } else {
-        shExecInfo.lpVerb = L"runas";
+        shExecInfo.lpVerb = "runas";
     }
-    shExecInfo.lpFile = reinterpret_cast<LPCWSTR> (cinstFileName.utf16());
-    shExecInfo.lpParameters =  reinterpret_cast<LPCWSTR> (parameters.utf16());
+    shExecInfo.lpFile = strdup(cinstFileName.toLocal8Bit().constData());
+    shExecInfo.lpParameters = strdup(parameters.toUtf8().constData());
 
     qDebug() << "Starting process " << cinstFileName <<" params: " << parameters;
 
-    if (!ShellExecuteExW(&shExecInfo)) {
+    if (!ShellExecuteExA(&shExecInfo)) {
         char* errmsg = getLastErrorMsg();
         QString qerrmsg = QString::fromUtf8(errmsg);
         free(errmsg);
         emit error(tr("Error executing process: %1").arg(qerrmsg));
         fclose(vres.fptr);
+        free((void*)shExecInfo.lpFile);
+        free((void*)shExecInfo.lpParameters);
         return;
     }
 
     retval = WaitForSingleObject(shExecInfo.hProcess, INSTALL_TIMEOUT);
 
+    free((void*)shExecInfo.lpFile);
+    free((void*)shExecInfo.lpParameters);
+    shExecInfo.lpFile = NULL;
+    shExecInfo.lpParameters = NULL;
+
     if (retval != WAIT_OBJECT_0) {
         if (retval == WAIT_FAILED) {
             char* errmsg = getLastErrorMsg();


More information about the Trustbridge-commits mailing list