James Hawkins : msi: Factor out publishing the product properties.

Alexandre Julliard julliard at winehq.org
Tue Jun 24 06:45:48 CDT 2008


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

Author: James Hawkins <jhawkins at codeweavers.com>
Date:   Mon Jun 23 22:59:41 2008 -0500

msi: Factor out publishing the product properties.

---

 dlls/msi/action.c |  148 +++++++++++++++++++++++++++--------------------------
 1 files changed, 75 insertions(+), 73 deletions(-)

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 8f1920d..b85b6ce 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -3388,6 +3388,77 @@ static UINT msi_publish_sourcelist(MSIPACKAGE *package)
     return ERROR_SUCCESS;
 }
 
+static UINT msi_publish_product_properties(MSIPACKAGE *package, HKEY hkey)
+{
+    MSIHANDLE hdb, suminfo;
+    WCHAR guids[MAX_PATH];
+    LPWSTR buffer;
+    LPWSTR ptr;
+    DWORD langid;
+    DWORD size;
+    UINT r;
+
+    static const WCHAR szProductLanguage[] =
+        {'P','r','o','d','u','c','t','L','a','n','g','u','a','g','e',0};
+    static const WCHAR szARPProductIcon[] =
+        {'A','R','P','P','R','O','D','U','C','T','I','C','O','N',0};
+    static const WCHAR szProductVersion[] =
+        {'P','r','o','d','u','c','t','V','e','r','s','i','o','n',0};
+
+    buffer = msi_dup_property(package, INSTALLPROPERTY_PRODUCTNAMEW);
+    msi_reg_set_val_str(hkey, INSTALLPROPERTY_PRODUCTNAMEW, buffer);
+    msi_free(buffer);
+
+    langid = msi_get_property_int(package, szProductLanguage, 0);
+    msi_reg_set_val_dword(hkey, INSTALLPROPERTY_LANGUAGEW, langid);
+
+    ptr = strrchrW(package->PackagePath, '\\' ) + 1;
+    msi_reg_set_val_str(hkey, INSTALLPROPERTY_PACKAGENAMEW, ptr);
+
+    /* FIXME */
+    msi_reg_set_val_dword(hkey, INSTALLPROPERTY_AUTHORIZED_LUA_APPW, 0);
+
+    buffer = msi_dup_property(package, szARPProductIcon);
+    if (buffer)
+    {
+        LPWSTR path = build_icon_path(package,buffer);
+        msi_reg_set_val_str(hkey, INSTALLPROPERTY_PRODUCTICONW, path);
+        msi_free(path);
+        msi_free(buffer);
+    }
+
+    buffer = msi_dup_property(package, szProductVersion);
+    if (buffer)
+    {
+        DWORD verdword = msi_version_str_to_dword(buffer);
+        msi_reg_set_val_dword(hkey, INSTALLPROPERTY_VERSIONW, verdword);
+        msi_free(buffer);
+    }
+
+    hdb = alloc_msihandle(&package->db->hdr);
+    if (!hdb)
+        return ERROR_NOT_ENOUGH_MEMORY;
+
+    r = MsiGetSummaryInformationW(hdb, NULL, 0, &suminfo);
+    MsiCloseHandle(hdb);
+    if (r != ERROR_SUCCESS)
+        goto done;
+
+    size = MAX_PATH;
+    r = MsiSummaryInfoGetPropertyW(suminfo, PID_REVNUMBER, NULL, NULL,
+                                   NULL, guids, &size);
+    if (r != ERROR_SUCCESS)
+        goto done;
+
+    ptr = strchrW(guids, ';');
+    if (ptr) *ptr = 0;
+    msi_reg_set_val_str(hkey, INSTALLPROPERTY_PACKAGECODEW, guids);
+
+done:
+    MsiCloseHandle(suminfo);
+    return ERROR_SUCCESS;
+}
+
 static BOOL msi_check_publish(MSIPACKAGE *package)
 {
     MSIFEATURE *feature;
@@ -3410,22 +3481,12 @@ static BOOL msi_check_publish(MSIPACKAGE *package)
 static UINT ACTION_PublishProduct(MSIPACKAGE *package)
 {
     UINT rc;
-    LPWSTR packname;
     HKEY hukey=0;
     HKEY hudkey=0;
     HKEY source;
-    static const WCHAR szProductLanguage[] =
-        {'P','r','o','d','u','c','t','L','a','n','g','u','a','g','e',0};
-    static const WCHAR szARPProductIcon[] =
-        {'A','R','P','P','R','O','D','U','C','T','I','C','O','N',0};
-    static const WCHAR szProductVersion[] =
-        {'P','r','o','d','u','c','t','V','e','r','s','i','o','n',0};
+
     static const WCHAR szSourceList[] =
         {'S','o','u','r','c','e','L','i','s','t',0};
-    DWORD langid;
-    LPWSTR buffer;
-    DWORD size;
-    MSIHANDLE hDb, hSumInfo;
 
     /* FIXME: also need to publish if the product is in advertise mode */
     if (!msi_check_publish(package))
@@ -3456,70 +3517,11 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package)
     if (rc != ERROR_SUCCESS)
         goto end;
 
-    buffer = msi_dup_property( package, INSTALLPROPERTY_PRODUCTNAMEW );
-    msi_reg_set_val_str( hukey, INSTALLPROPERTY_PRODUCTNAMEW, buffer );
-    msi_free(buffer);
-
-    langid = msi_get_property_int( package, szProductLanguage, 0 );
-    msi_reg_set_val_dword( hukey, INSTALLPROPERTY_LANGUAGEW, langid );
-
-    packname = strrchrW( package->PackagePath, '\\' ) + 1;
-    msi_reg_set_val_str( hukey, INSTALLPROPERTY_PACKAGENAMEW, packname );
-
-    /* FIXME */
-    msi_reg_set_val_dword( hukey, INSTALLPROPERTY_AUTHORIZED_LUA_APPW, 0 );
-
-    buffer = msi_dup_property( package, szARPProductIcon );
-    if (buffer)
-    {
-        LPWSTR path = build_icon_path(package,buffer);
-        msi_reg_set_val_str( hukey, INSTALLPROPERTY_PRODUCTICONW, path );
-        msi_free( path );
-    }
-    msi_free(buffer);
-
-    buffer = msi_dup_property( package, szProductVersion );
-    if (buffer)
-    {
-        DWORD verdword = msi_version_str_to_dword(buffer);
-        msi_reg_set_val_dword( hukey, INSTALLPROPERTY_VERSIONW, verdword );
-    }
-    msi_free(buffer);
-
     /* FIXME: Need to write more keys to the user registry */
-  
-    hDb= alloc_msihandle( &package->db->hdr );
-    if (!hDb) {
-        rc = ERROR_NOT_ENOUGH_MEMORY;
+
+    rc = msi_publish_product_properties(package, hukey);
+    if (rc != ERROR_SUCCESS)
         goto end;
-    }
-    rc = MsiGetSummaryInformationW(hDb, NULL, 0, &hSumInfo); 
-    MsiCloseHandle(hDb);
-    if (rc == ERROR_SUCCESS)
-    {
-        WCHAR guidbuffer[0x200];
-        size = 0x200;
-        rc = MsiSummaryInfoGetPropertyW(hSumInfo, 9, NULL, NULL, NULL,
-                                        guidbuffer, &size);
-        if (rc == ERROR_SUCCESS)
-        {
-            /* for now we only care about the first guid */
-            LPWSTR ptr = strchrW(guidbuffer,';');
-            if (ptr) *ptr = 0;
-            msi_reg_set_val_str( hukey, INSTALLPROPERTY_PACKAGECODEW, guidbuffer );
-        }
-        else
-        {
-            ERR("Unable to query Revision_Number...\n");
-            rc = ERROR_SUCCESS;
-        }
-        MsiCloseHandle(hSumInfo);
-    }
-    else
-    {
-        ERR("Unable to open Summary Information\n");
-        rc = ERROR_SUCCESS;
-    }
 
     rc = msi_publish_sourcelist(package);
     if (rc != ERROR_SUCCESS)




More information about the wine-cvs mailing list