Andrew Nguyen : msi: Correctly set the process working directory in custom action type 34.

Alexandre Julliard julliard at winehq.org
Wed Mar 3 11:15:45 CST 2010


Module: wine
Branch: master
Commit: 0270f18e110128b2646ac050c8bfb316a0515e43
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0270f18e110128b2646ac050c8bfb316a0515e43

Author: Andrew Nguyen <arethusa26 at gmail.com>
Date:   Wed Mar  3 02:53:23 2010 -0600

msi: Correctly set the process working directory in custom action type 34.

---

 dlls/msi/custom.c |   36 +++++++++++++++++++++---------------
 1 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/dlls/msi/custom.c b/dlls/msi/custom.c
index 2b2a3e1..584c050 100644
--- a/dlls/msi/custom.c
+++ b/dlls/msi/custom.c
@@ -1120,38 +1120,44 @@ static UINT HANDLE_CustomType50(MSIPACKAGE *package, LPCWSTR source,
 static UINT HANDLE_CustomType34(MSIPACKAGE *package, LPCWSTR source,
                                 LPCWSTR target, const INT type, LPCWSTR action)
 {
-    LPWSTR filename, deformated;
+    LPWSTR workingdir, filename;
     STARTUPINFOW si;
     PROCESS_INFORMATION info;
     BOOL rc;
 
-    memset(&si,0,sizeof(STARTUPINFOW));
+    memset(&si, 0, sizeof(STARTUPINFOW));
 
-    filename = resolve_folder(package, source, FALSE, FALSE, TRUE, NULL);
+    workingdir = resolve_folder(package, source, FALSE, FALSE, TRUE, NULL);
 
-    if (!filename)
+    if (!workingdir)
         return ERROR_FUNCTION_FAILED;
 
-    SetCurrentDirectoryW(filename);
-    msi_free(filename);
+    deformat_string(package, target, &filename);
 
-    deformat_string(package,target,&deformated);
-
-    if (!deformated)
+    if (!filename)
+    {
+        msi_free(workingdir);
         return ERROR_FUNCTION_FAILED;
+    }
 
-    TRACE("executing exe %s\n", debugstr_w(deformated));
+    TRACE("executing exe %s with working directory %s\n",
+          debugstr_w(filename), debugstr_w(workingdir));
 
-    rc = CreateProcessW(NULL, deformated, NULL, NULL, FALSE, 0, NULL,
-                  c_collen, &si, &info);
+    rc = CreateProcessW(NULL, filename, NULL, NULL, FALSE, 0, NULL,
+                        workingdir, &si, &info);
 
     if ( !rc )
     {
-        ERR("Unable to execute command %s\n", debugstr_w(deformated));
-        msi_free(deformated);
+        ERR("Unable to execute command %s with working directory %s\n",
+            debugstr_w(filename), debugstr_w(workingdir));
+        msi_free(filename);
+        msi_free(workingdir);
         return ERROR_SUCCESS;
     }
-    msi_free(deformated);
+
+    msi_free(filename);
+    msi_free(workingdir);
+
     CloseHandle( info.hThread );
 
     return wait_process_handle(package, type, info.hProcess, action);




More information about the wine-cvs mailing list