[PATCH 3/5] msi: Use wide character string literals in package.c.

Hans Leidekker hans at codeweavers.com
Wed Oct 28 05:19:48 CDT 2020


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/msi/package.c | 526 +++++++++++++++------------------------------
 1 file changed, 179 insertions(+), 347 deletions(-)

diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 7b64362b10d..2483d99e2b5 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -359,20 +359,11 @@ static void MSI_FreePackage( MSIOBJECTHDR *arg)
 
 static UINT create_temp_property_table(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'C','R','E','A','T','E',' ','T','A','B','L','E',' ',
-        '`','_','P','r','o','p','e','r','t','y','`',' ','(',' ',
-        '`','_','P','r','o','p','e','r','t','y','`',' ',
-        'C','H','A','R','(','5','6',')',' ','N','O','T',' ','N','U','L','L',' ',
-        'T','E','M','P','O','R','A','R','Y',',',' ',
-        '`','V','a','l','u','e','`',' ','C','H','A','R','(','9','8',')',' ',
-        'N','O','T',' ','N','U','L','L',' ','T','E','M','P','O','R','A','R','Y',
-        ' ','P','R','I','M','A','R','Y',' ','K','E','Y',' ',
-        '`','_','P','r','o','p','e','r','t','y','`',')',' ','H','O','L','D',0};
     MSIQUERY *view;
     UINT rc;
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"CREATE TABLE `_Property` ( `_Property` CHAR(56) NOT NULL TEMPORARY, "
+                                            L"`Value` CHAR(98) NOT NULL TEMPORARY PRIMARY KEY `_Property`) HOLD", &view);
     if (rc != ERROR_SUCCESS)
         return rc;
 
@@ -384,22 +375,10 @@ static UINT create_temp_property_table(MSIPACKAGE *package)
 
 UINT msi_clone_properties( MSIDATABASE *db )
 {
-    static const WCHAR query_select[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','P','r','o','p','e','r','t','y','`',0};
-    static const WCHAR query_insert[] = {
-        'I','N','S','E','R','T',' ','I','N','T','O',' ',
-        '`','_','P','r','o','p','e','r','t','y','`',' ',
-        '(','`','_','P','r','o','p','e','r','t','y','`',',','`','V','a','l','u','e','`',')',' ',
-        'V','A','L','U','E','S',' ','(','?',',','?',')',0};
-    static const WCHAR query_update[] = {
-        'U','P','D','A','T','E',' ','`','_','P','r','o','p','e','r','t','y','`',' ',
-        'S','E','T',' ','`','V','a','l','u','e','`',' ','=',' ','?',' ',
-        'W','H','E','R','E',' ','`','_','P','r','o','p','e','r','t','y','`',' ','=',' ','?',0};
     MSIQUERY *view_select;
     UINT rc;
 
-    rc = MSI_DatabaseOpenViewW( db, query_select, &view_select );
+    rc = MSI_DatabaseOpenViewW( db, L"SELECT * FROM `Property`", &view_select );
     if (rc != ERROR_SUCCESS)
         return rc;
 
@@ -420,7 +399,7 @@ UINT msi_clone_properties( MSIDATABASE *db )
         if (rc != ERROR_SUCCESS)
             break;
 
-        rc = MSI_DatabaseOpenViewW( db, query_insert, &view_insert );
+        rc = MSI_DatabaseOpenViewW( db, L"INSERT INTO `_Property` (`_Property`,`Value`) VALUES (?,?)", &view_insert );
         if (rc != ERROR_SUCCESS)
         {
             msiobj_release( &rec_select->hdr );
@@ -436,7 +415,7 @@ UINT msi_clone_properties( MSIDATABASE *db )
 
             TRACE("insert failed, trying update\n");
 
-            rc = MSI_DatabaseOpenViewW( db, query_update, &view_update );
+            rc = MSI_DatabaseOpenViewW( db, L"UPDATE `_Property` SET `Value` = ? WHERE `_Property` = ?", &view_update );
             if (rc != ERROR_SUCCESS)
             {
                 WARN("open view failed %u\n", rc);
@@ -481,7 +460,7 @@ static UINT set_installed_prop( MSIPACKAGE *package )
     if (r == ERROR_SUCCESS)
     {
         RegCloseKey( hkey );
-        msi_set_property( package->db, szInstalled, szOne, -1 );
+        msi_set_property( package->db, L"Installed", L"1", -1 );
     }
     return r;
 }
@@ -523,7 +502,7 @@ static UINT set_user_sid_prop( MSIPACKAGE *package )
     if (!ConvertSidToStringSidW( psid, &sid_str ))
         goto done;
 
-    r = msi_set_property( package->db, szUserSID, sid_str, -1 );
+    r = msi_set_property( package->db, L"UserSID", sid_str, -1 );
 
 done:
     LocalFree( sid_str );
@@ -536,39 +515,27 @@ done:
 
 static LPWSTR get_fusion_filename(MSIPACKAGE *package)
 {
-    static const WCHAR fusion[] =
-        {'f','u','s','i','o','n','.','d','l','l',0};
-    static const WCHAR subkey[] =
-        {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
-         'N','E','T',' ','F','r','a','m','e','w','o','r','k',' ','S','e','t','u','p','\\','N','D','P',0};
-    static const WCHAR subdir[] =
-        {'M','i','c','r','o','s','o','f','t','.','N','E','T','\\','F','r','a','m','e','w','o','r','k','\\',0};
-    static const WCHAR v2050727[] =
-        {'v','2','.','0','.','5','0','7','2','7',0};
-    static const WCHAR v4client[] =
-        {'v','4','\\','C','l','i','e','n','t',0};
-    static const WCHAR installpath[] =
-        {'I','n','s','t','a','l','l','P','a','t','h',0};
     HKEY netsetup, hkey;
     LONG res;
     DWORD size, len, type;
     WCHAR windir[MAX_PATH], path[MAX_PATH], *filename = NULL;
 
-    res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, subkey, 0, KEY_CREATE_SUB_KEY, &netsetup);
+    res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\NET Framework Setup\\NDP", 0, KEY_CREATE_SUB_KEY,
+                        &netsetup);
     if (res != ERROR_SUCCESS)
         return NULL;
 
-    if (!RegCreateKeyExW(netsetup, v4client, 0, NULL, 0, KEY_QUERY_VALUE, NULL, &hkey, NULL))
+    if (!RegCreateKeyExW(netsetup, L"v4\\Client", 0, NULL, 0, KEY_QUERY_VALUE, NULL, &hkey, NULL))
     {
         size = ARRAY_SIZE(path);
-        if (!RegQueryValueExW(hkey, installpath, NULL, &type, (BYTE *)path, &size))
+        if (!RegQueryValueExW(hkey, L"InstallPath", NULL, &type, (BYTE *)path, &size))
         {
-            len = lstrlenW(path) + lstrlenW(fusion) + 2;
+            len = lstrlenW(path) + lstrlenW(L"fusion.dll") + 2;
             if (!(filename = msi_alloc(len * sizeof(WCHAR)))) return NULL;
 
             lstrcpyW(filename, path);
-            lstrcatW(filename, szBackSlash);
-            lstrcatW(filename, fusion);
+            lstrcpyW(filename, L"\\");
+            lstrcatW(filename, L"fusion.dll");
             if (GetFileAttributesW(filename) != INVALID_FILE_ATTRIBUTES)
             {
                 TRACE( "found %s\n", debugstr_w(filename) );
@@ -580,19 +547,20 @@ static LPWSTR get_fusion_filename(MSIPACKAGE *package)
         RegCloseKey(hkey);
     }
 
-    if (!RegCreateKeyExW(netsetup, v2050727, 0, NULL, 0, KEY_QUERY_VALUE, NULL, &hkey, NULL))
+    if (!RegCreateKeyExW(netsetup, L"v2.0.50727", 0, NULL, 0, KEY_QUERY_VALUE, NULL, &hkey, NULL))
     {
         RegCloseKey(hkey);
         GetWindowsDirectoryW(windir, MAX_PATH);
-        len = lstrlenW(windir) + lstrlenW(subdir) + lstrlenW(v2050727) + lstrlenW(fusion) + 3;
+        len = lstrlenW(windir) + lstrlenW(L"Microsoft.NET\\Framework\\") + lstrlenW(L"v2.0.50727") +
+              lstrlenW(L"fusion.dll") + 3;
         if (!(filename = msi_alloc(len * sizeof(WCHAR)))) return NULL;
 
         lstrcpyW(filename, windir);
-        lstrcatW(filename, szBackSlash);
-        lstrcatW(filename, subdir);
-        lstrcatW(filename, v2050727);
-        lstrcatW(filename, szBackSlash);
-        lstrcatW(filename, fusion);
+        lstrcatW(filename, L"\\");
+        lstrcatW(filename, L"Microsoft.NET\\Framework\\");
+        lstrcatW(filename, L"v2.0.50727");
+        lstrcatW(filename, L"\\");
+        lstrcatW(filename, L"fusion.dll");
         if (GetFileAttributesW(filename) != INVALID_FILE_ATTRIBUTES)
         {
             TRACE( "found %s\n", debugstr_w(filename) );
@@ -620,19 +588,6 @@ static void set_msi_assembly_prop(MSIPACKAGE *package)
     LPWSTR fusion, verstr;
     LANGANDCODEPAGE *translate;
 
-    static const WCHAR netasm[] = {
-        'M','s','i','N','e','t','A','s','s','e','m','b','l','y','S','u','p','p','o','r','t',0
-    };
-    static const WCHAR translation[] = {
-        '\\','V','a','r','F','i','l','e','I','n','f','o',
-        '\\','T','r','a','n','s','l','a','t','i','o','n',0
-    };
-    static const WCHAR verfmt[] = {
-        '\\','S','t','r','i','n','g','F','i','l','e','I','n','f','o',
-        '\\','%','0','4','x','%','0','4','x',
-        '\\','P','r','o','d','u','c','t','V','e','r','s','i','o','n',0
-    };
-
     fusion = get_fusion_filename(package);
     if (!fusion)
         return;
@@ -648,10 +603,11 @@ static void set_msi_assembly_prop(MSIPACKAGE *package)
     if (!GetFileVersionInfoW(fusion, handle, size, version))
         goto done;
 
-    if (!VerQueryValueW(version, translation, (LPVOID *)&translate, &val_len))
+    if (!VerQueryValueW(version, L"\\VarFileInfo\\Translation", (LPVOID *)&translate, &val_len))
         goto done;
 
-    swprintf(buf, ARRAY_SIZE(buf), verfmt, translate[0].wLanguage, translate[0].wCodePage);
+    swprintf(buf, ARRAY_SIZE(buf), L"\\StringFileInfo\\%04x%04x\\ProductVersion", translate[0].wLanguage,
+             translate[0].wCodePage);
 
     if (!VerQueryValueW(version, buf, (LPVOID *)&verstr, &val_len))
         goto done;
@@ -659,7 +615,7 @@ static void set_msi_assembly_prop(MSIPACKAGE *package)
     if (!val_len || !verstr)
         goto done;
 
-    msi_set_property( package->db, netasm, verstr, -1 );
+    msi_set_property( package->db, L"MsiNetAssemblySupport", verstr, -1 );
 
 done:
     msi_free(fusion);
@@ -679,84 +635,6 @@ static VOID set_installer_properties(MSIPACKAGE *package)
     SYSTEM_INFO sys_info;
     LANGID langid;
 
-    static const WCHAR szCommonFilesFolder[] = {'C','o','m','m','o','n','F','i','l','e','s','F','o','l','d','e','r',0};
-    static const WCHAR szProgramFilesFolder[] = {'P','r','o','g','r','a','m','F','i','l','e','s','F','o','l','d','e','r',0};
-    static const WCHAR szCommonAppDataFolder[] = {'C','o','m','m','o','n','A','p','p','D','a','t','a','F','o','l','d','e','r',0};
-    static const WCHAR szFavoritesFolder[] = {'F','a','v','o','r','i','t','e','s','F','o','l','d','e','r',0};
-    static const WCHAR szFontsFolder[] = {'F','o','n','t','s','F','o','l','d','e','r',0};
-    static const WCHAR szSendToFolder[] = {'S','e','n','d','T','o','F','o','l','d','e','r',0};
-    static const WCHAR szStartMenuFolder[] = {'S','t','a','r','t','M','e','n','u','F','o','l','d','e','r',0};
-    static const WCHAR szStartupFolder[] = {'S','t','a','r','t','u','p','F','o','l','d','e','r',0};
-    static const WCHAR szTemplateFolder[] = {'T','e','m','p','l','a','t','e','F','o','l','d','e','r',0};
-    static const WCHAR szDesktopFolder[] = {'D','e','s','k','t','o','p','F','o','l','d','e','r',0};
-    static const WCHAR szProgramMenuFolder[] = {'P','r','o','g','r','a','m','M','e','n','u','F','o','l','d','e','r',0};
-    static const WCHAR szAdminToolsFolder[] = {'A','d','m','i','n','T','o','o','l','s','F','o','l','d','e','r',0};
-    static const WCHAR szSystemFolder[] = {'S','y','s','t','e','m','F','o','l','d','e','r',0};
-    static const WCHAR szSystem16Folder[] = {'S','y','s','t','e','m','1','6','F','o','l','d','e','r',0};
-    static const WCHAR szLocalAppDataFolder[] = {'L','o','c','a','l','A','p','p','D','a','t','a','F','o','l','d','e','r',0};
-    static const WCHAR szMyPicturesFolder[] = {'M','y','P','i','c','t','u','r','e','s','F','o','l','d','e','r',0};
-    static const WCHAR szPersonalFolder[] = {'P','e','r','s','o','n','a','l','F','o','l','d','e','r',0};
-    static const WCHAR szWindowsVolume[] = {'W','i','n','d','o','w','s','V','o','l','u','m','e',0};
-    static const WCHAR szPrivileged[] = {'P','r','i','v','i','l','e','g','e','d',0};
-    static const WCHAR szVersion9x[] = {'V','e','r','s','i','o','n','9','X',0};
-    static const WCHAR szVersionNT[] = {'V','e','r','s','i','o','n','N','T',0};
-    static const WCHAR szMsiNTProductType[] = {'M','s','i','N','T','P','r','o','d','u','c','t','T','y','p','e',0};
-    static const WCHAR szFormat[] = {'%','u',0};
-    static const WCHAR szFormat2[] = {'%','u','.','%','u',0};
-    static const WCHAR szWindowsBuild[] = {'W','i','n','d','o','w','s','B','u','i','l','d',0};
-    static const WCHAR szServicePackLevel[] = {'S','e','r','v','i','c','e','P','a','c','k','L','e','v','e','l',0};
-    static const WCHAR szVersionMsi[] = { 'V','e','r','s','i','o','n','M','s','i',0 };
-    static const WCHAR szVersionDatabase[] = { 'V','e','r','s','i','o','n','D','a','t','a','b','a','s','e',0 };
-    static const WCHAR szPhysicalMemory[] = { 'P','h','y','s','i','c','a','l','M','e','m','o','r','y',0 };
-    static const WCHAR szScreenX[] = {'S','c','r','e','e','n','X',0};
-    static const WCHAR szScreenY[] = {'S','c','r','e','e','n','Y',0};
-    static const WCHAR szColorBits[] = {'C','o','l','o','r','B','i','t','s',0};
-    static const WCHAR szIntFormat[] = {'%','d',0};
-    static const WCHAR szMsiAMD64[] = { 'M','s','i','A','M','D','6','4',0 };
-    static const WCHAR szMsix64[] = { 'M','s','i','x','6','4',0 };
-    static const WCHAR szSystem64Folder[] = { 'S','y','s','t','e','m','6','4','F','o','l','d','e','r',0 };
-    static const WCHAR szCommonFiles64Folder[] = { 'C','o','m','m','o','n','F','i','l','e','s','6','4','F','o','l','d','e','r',0 };
-    static const WCHAR szProgramFiles64Folder[] = { 'P','r','o','g','r','a','m','F','i','l','e','s','6','4','F','o','l','d','e','r',0 };
-    static const WCHAR szProgramFilesDir[] = {'P','r','o','g','r','a','m','F','i','l','e','s','D','i','r',0};
-    static const WCHAR szProgramFilesDirx86[] = {'P','r','o','g','r','a','m','F','i','l','e','s','D','i','r',' ','(','x','8','6',')',0};
-    static const WCHAR szCommonFilesDir[] = {'C','o','m','m','o','n','F','i','l','e','s','D','i','r',0};
-    static const WCHAR szCommonFilesDirx86[] = {'C','o','m','m','o','n','F','i','l','e','s','D','i','r',' ','(','x','8','6',')',0};
-    static const WCHAR szVersionNT64[] = { 'V','e','r','s','i','o','n','N','T','6','4',0 };
-    static const WCHAR szUserInfo[] = {
-        'S','O','F','T','W','A','R','E','\\',
-        'M','i','c','r','o','s','o','f','t','\\',
-        'M','S',' ','S','e','t','u','p',' ','(','A','C','M','E',')','\\',
-        'U','s','e','r',' ','I','n','f','o',0
-    };
-    static const WCHAR szDefName[] = { 'D','e','f','N','a','m','e',0 };
-    static const WCHAR szDefCompany[] = { 'D','e','f','C','o','m','p','a','n','y',0 };
-    static const WCHAR szCurrentVersion[] = {
-        'S','O','F','T','W','A','R','E','\\',
-        'M','i','c','r','o','s','o','f','t','\\',
-        'W','i','n','d','o','w','s','\\',
-        'C','u','r','r','e','n','t','V','e','r','s','i','o','n',0
-    };
-    static const WCHAR szCurrentVersionNT[] = {
-        'S','O','F','T','W','A','R','E','\\',
-        'M','i','c','r','o','s','o','f','t','\\',
-        'W','i','n','d','o','w','s',' ','N','T','\\',
-        'C','u','r','r','e','n','t','V','e','r','s','i','o','n',0
-    };
-    static const WCHAR szRegisteredOwner[] = {'R','e','g','i','s','t','e','r','e','d','O','w','n','e','r',0};
-    static const WCHAR szRegisteredOrganization[] = {
-        'R','e','g','i','s','t','e','r','e','d','O','r','g','a','n','i','z','a','t','i','o','n',0
-    };
-    static const WCHAR szUSERNAME[] = {'U','S','E','R','N','A','M','E',0};
-    static const WCHAR szCOMPANYNAME[] = {'C','O','M','P','A','N','Y','N','A','M','E',0};
-    static const WCHAR szUserLanguageID[] = {'U','s','e','r','L','a','n','g','u','a','g','e','I','D',0};
-    static const WCHAR szSystemLangID[] = {'S','y','s','t','e','m','L','a','n','g','u','a','g','e','I','D',0};
-    static const WCHAR szProductState[] = {'P','r','o','d','u','c','t','S','t','a','t','e',0};
-    static const WCHAR szLogonUser[] = {'L','o','g','o','n','U','s','e','r',0};
-    static const WCHAR szNetHoodFolder[] = {'N','e','t','H','o','o','d','F','o','l','d','e','r',0};
-    static const WCHAR szPrintHoodFolder[] = {'P','r','i','n','t','H','o','o','d','F','o','l','d','e','r',0};
-    static const WCHAR szRecentFolder[] = {'R','e','c','e','n','t','F','o','l','d','e','r',0};
-    static const WCHAR szComputerName[] = {'C','o','m','p','u','t','e','r','N','a','m','e',0};
-
     /*
      * Other things that probably should be set:
      *
@@ -765,100 +643,100 @@ static VOID set_installer_properties(MSIPACKAGE *package)
      */
 
     SHGetFolderPathW(NULL, CSIDL_COMMON_APPDATA, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szCommonAppDataFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"CommonAppDataFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_FAVORITES, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szFavoritesFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"FavoritesFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szFontsFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"FontsFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_SENDTO, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szSendToFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"SendToFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_STARTMENU, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szStartMenuFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"StartMenuFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_STARTUP, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szStartupFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"StartupFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_TEMPLATES, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szTemplateFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"TemplateFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_DESKTOP, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szDesktopFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"DesktopFolder", pth, -1 );
 
     /* FIXME: set to AllUsers profile path if ALLUSERS is set */
     SHGetFolderPathW(NULL, CSIDL_PROGRAMS, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szProgramMenuFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"ProgramMenuFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_ADMINTOOLS, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szAdminToolsFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"AdminToolsFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szAppDataFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"AppDataFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_SYSTEM, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szSystemFolder, pth, -1 );
-    msi_set_property( package->db, szSystem16Folder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"SystemFolder", pth, -1 );
+    msi_set_property( package->db, L"System16Folder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szLocalAppDataFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"LocalAppDataFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_MYPICTURES, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szMyPicturesFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"MyPicturesFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_PERSONAL, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szPersonalFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"PersonalFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_WINDOWS, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szWindowsFolder, pth, -1 );
-    
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"WindowsFolder", pth, -1 );
+
     SHGetFolderPathW(NULL, CSIDL_PRINTHOOD, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szPrintHoodFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"PrintHoodFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_NETHOOD, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szNetHoodFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"NetHoodFolder", pth, -1 );
 
     SHGetFolderPathW(NULL, CSIDL_RECENT, NULL, 0, pth);
-    lstrcatW(pth, szBackSlash);
-    msi_set_property( package->db, szRecentFolder, pth, -1 );
+    lstrcatW(pth, L"\\");
+    msi_set_property( package->db, L"RecentFolder", pth, -1 );
 
     /* Physical Memory is specified in MB. Using total amount. */
     msex.dwLength = sizeof(msex);
     GlobalMemoryStatusEx( &msex );
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szIntFormat, (int)(msex.ullTotalPhys / 1024 / 1024) );
-    msi_set_property( package->db, szPhysicalMemory, bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%d", (int)(msex.ullTotalPhys / 1024 / 1024) );
+    msi_set_property( package->db, L"PhysicalMemory", bufstr, len );
 
     SHGetFolderPathW(NULL, CSIDL_WINDOWS, NULL, 0, pth);
     ptr = wcschr(pth,'\\');
     if (ptr) *(ptr + 1) = 0;
-    msi_set_property( package->db, szWindowsVolume, pth, -1 );
-    
+    msi_set_property( package->db, L"WindowsVolume", pth, -1 );
+
     len = GetTempPathW(MAX_PATH, pth);
-    msi_set_property( package->db, szTempFolder, pth, len );
+    msi_set_property( package->db, L"TempFolder", pth, len );
 
     /* in a wine environment the user is always admin and privileged */
-    msi_set_property( package->db, szAdminUser, szOne, -1 );
-    msi_set_property( package->db, szPrivileged, szOne, -1 );
+    msi_set_property( package->db, L"AdminUser", L"1", -1 );
+    msi_set_property( package->db, L"Privileged", L"1", -1 );
 
     /* set the os things */
     OSVersion.dwOSVersionInfoSize = sizeof(OSVersion);
@@ -869,122 +747,122 @@ static VOID set_installer_properties(MSIPACKAGE *package)
         verval = 603;
         OSVersion.dwBuildNumber = 9600;
     }
-    len = swprintf( verstr, ARRAY_SIZE(verstr), szFormat, verval );
+    len = swprintf( verstr, ARRAY_SIZE(verstr), L"%u", verval );
     switch (OSVersion.dwPlatformId)
     {
-        case VER_PLATFORM_WIN32_WINDOWS:    
-            msi_set_property( package->db, szVersion9x, verstr, len );
+        case VER_PLATFORM_WIN32_WINDOWS:
+            msi_set_property( package->db, L"Version9X", verstr, len );
             break;
         case VER_PLATFORM_WIN32_NT:
-            msi_set_property( package->db, szVersionNT, verstr, len );
-            len = swprintf( bufstr, ARRAY_SIZE(bufstr), szFormat,OSVersion.wProductType );
-            msi_set_property( package->db, szMsiNTProductType, bufstr, len );
+            msi_set_property( package->db, L"VersionNT", verstr, len );
+            len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%u", OSVersion.wProductType );
+            msi_set_property( package->db, L"MsiNTProductType", bufstr, len );
             break;
     }
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szFormat, OSVersion.dwBuildNumber );
-    msi_set_property( package->db, szWindowsBuild, bufstr, len );
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szFormat, OSVersion.wServicePackMajor );
-    msi_set_property( package->db, szServicePackLevel, bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%u", OSVersion.dwBuildNumber );
+    msi_set_property( package->db, L"WindowsBuild", bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%u", OSVersion.wServicePackMajor );
+    msi_set_property( package->db, L"ServicePackLevel", bufstr, len );
 
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szFormat2, MSI_MAJORVERSION, MSI_MINORVERSION );
-    msi_set_property( package->db, szVersionMsi, bufstr, len );
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szFormat, MSI_MAJORVERSION * 100 );
-    msi_set_property( package->db, szVersionDatabase, bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%u.%u", MSI_MAJORVERSION, MSI_MINORVERSION );
+    msi_set_property( package->db, L"VersionMsi", bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%u", MSI_MAJORVERSION * 100 );
+    msi_set_property( package->db, L"VersionDatabase", bufstr, len );
 
-    RegOpenKeyExW(HKEY_LOCAL_MACHINE, szCurrentVersion, 0,
+    RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion", 0,
         KEY_QUERY_VALUE | KEY_WOW64_64KEY, &hkey);
 
     GetNativeSystemInfo( &sys_info );
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szIntFormat, sys_info.wProcessorLevel );
-    msi_set_property( package->db, szIntel, bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%d", sys_info.wProcessorLevel );
+    msi_set_property( package->db, L"Intel", bufstr, len );
     if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
     {
         GetSystemDirectoryW( pth, MAX_PATH );
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szSystemFolder, pth, -1 );
+        msi_set_property( package->db, L"SystemFolder", pth, -1 );
 
         len = MAX_PATH;
-        RegQueryValueExW(hkey, szProgramFilesDir, 0, &type, (BYTE *)pth, &len);
+        RegQueryValueExW(hkey, L"ProgramFilesDir", 0, &type, (BYTE *)pth, &len);
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szProgramFilesFolder, pth, -1 );
+        msi_set_property( package->db, L"ProgramFilesFolder", pth, -1 );
 
         len = MAX_PATH;
-        RegQueryValueExW(hkey, szCommonFilesDir, 0, &type, (BYTE *)pth, &len);
+        RegQueryValueExW(hkey, L"CommonFilesDir", 0, &type, (BYTE *)pth, &len);
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szCommonFilesFolder, pth, -1 );
+        msi_set_property( package->db, L"CommonFilesFolder", pth, -1 );
     }
     else if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
     {
-        msi_set_property( package->db, szMsiAMD64, bufstr, -1 );
-        msi_set_property( package->db, szMsix64, bufstr, -1 );
-        msi_set_property( package->db, szVersionNT64, verstr, -1 );
+        msi_set_property( package->db, L"MsiAMD64", bufstr, -1 );
+        msi_set_property( package->db, L"Msix64", bufstr, -1 );
+        msi_set_property( package->db, L"VersionNT64", verstr, -1 );
 
         GetSystemDirectoryW( pth, MAX_PATH );
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szSystem64Folder, pth, -1 );
+        msi_set_property( package->db, L"System64Folder", pth, -1 );
 
         GetSystemWow64DirectoryW( pth, MAX_PATH );
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szSystemFolder, pth, -1 );
+        msi_set_property( package->db, L"SystemFolder", pth, -1 );
 
         len = MAX_PATH;
-        RegQueryValueExW(hkey, szProgramFilesDir, 0, &type, (BYTE *)pth, &len);
+        RegQueryValueExW(hkey, L"ProgramFilesDir", 0, &type, (BYTE *)pth, &len);
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szProgramFiles64Folder, pth, -1 );
+        msi_set_property( package->db, L"ProgramFiles64Folder", pth, -1 );
 
         len = MAX_PATH;
-        RegQueryValueExW(hkey, szProgramFilesDirx86, 0, &type, (BYTE *)pth, &len);
+        RegQueryValueExW(hkey, L"ProgramFilesDir (x86)", 0, &type, (BYTE *)pth, &len);
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szProgramFilesFolder, pth, -1 );
+        msi_set_property( package->db, L"ProgramFilesFolder", pth, -1 );
 
         len = MAX_PATH;
-        RegQueryValueExW(hkey, szCommonFilesDir, 0, &type, (BYTE *)pth, &len);
+        RegQueryValueExW(hkey, L"CommonFilesDir", 0, &type, (BYTE *)pth, &len);
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szCommonFiles64Folder, pth, -1 );
+        msi_set_property( package->db, L"CommonFiles64Folder", pth, -1 );
 
         len = MAX_PATH;
-        RegQueryValueExW(hkey, szCommonFilesDirx86, 0, &type, (BYTE *)pth, &len);
+        RegQueryValueExW(hkey, L"CommonFilesDir (x86)", 0, &type, (BYTE *)pth, &len);
         PathAddBackslashW( pth );
-        msi_set_property( package->db, szCommonFilesFolder, pth, -1 );
+        msi_set_property( package->db, L"CommonFilesFolder", pth, -1 );
     }
 
     RegCloseKey(hkey);
 
     /* Screen properties. */
     dc = GetDC(0);
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szIntFormat, GetDeviceCaps(dc, HORZRES) );
-    msi_set_property( package->db, szScreenX, bufstr, len );
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szIntFormat, GetDeviceCaps(dc, VERTRES) );
-    msi_set_property( package->db, szScreenY, bufstr, len );
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szIntFormat, GetDeviceCaps(dc, BITSPIXEL) );
-    msi_set_property( package->db, szColorBits, bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%d", GetDeviceCaps(dc, HORZRES) );
+    msi_set_property( package->db, L"ScreenX", bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%d", GetDeviceCaps(dc, VERTRES) );
+    msi_set_property( package->db, L"ScreenY", bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%d", GetDeviceCaps(dc, BITSPIXEL) );
+    msi_set_property( package->db, L"ColorBits", bufstr, len );
     ReleaseDC(0, dc);
 
     /* USERNAME and COMPANYNAME */
-    username = msi_dup_property( package->db, szUSERNAME );
-    companyname = msi_dup_property( package->db, szCOMPANYNAME );
+    username = msi_dup_property( package->db, L"USERNAME" );
+    companyname = msi_dup_property( package->db, L"COMPANYNAME" );
 
     if ((!username || !companyname) &&
-        RegOpenKeyW( HKEY_CURRENT_USER, szUserInfo, &hkey ) == ERROR_SUCCESS)
+        RegOpenKeyW( HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\MS Setup (ACME)\\User Info", &hkey ) == ERROR_SUCCESS)
     {
         if (!username &&
-            (username = msi_reg_get_val_str( hkey, szDefName )))
-            msi_set_property( package->db, szUSERNAME, username, -1 );
+            (username = msi_reg_get_val_str( hkey, L"DefName" )))
+            msi_set_property( package->db, L"USERNAME", username, -1 );
         if (!companyname &&
-            (companyname = msi_reg_get_val_str( hkey, szDefCompany )))
-            msi_set_property( package->db, szCOMPANYNAME, companyname, -1 );
+            (companyname = msi_reg_get_val_str( hkey, L"DefCompany" )))
+            msi_set_property( package->db, L"COMPANYNAME", companyname, -1 );
         CloseHandle( hkey );
     }
     if ((!username || !companyname) &&
-        RegOpenKeyExW( HKEY_LOCAL_MACHINE, szCurrentVersionNT, 0, KEY_QUERY_VALUE|KEY_WOW64_64KEY,
-                       &hkey ) == ERROR_SUCCESS)
+        RegOpenKeyExW( HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0,
+                       KEY_QUERY_VALUE|KEY_WOW64_64KEY, &hkey ) == ERROR_SUCCESS)
     {
         if (!username &&
-            (username = msi_reg_get_val_str( hkey, szRegisteredOwner )))
-            msi_set_property( package->db, szUSERNAME, username, -1 );
+            (username = msi_reg_get_val_str( hkey, L"RegisteredOwner" )))
+            msi_set_property( package->db, L"USERNAME", username, -1 );
         if (!companyname &&
-            (companyname = msi_reg_get_val_str( hkey, szRegisteredOrganization )))
-            msi_set_property( package->db, szCOMPANYNAME, companyname, -1 );
+            (companyname = msi_reg_get_val_str( hkey, L"RegisteredOrganization" )))
+            msi_set_property( package->db, L"COMPANYNAME", companyname, -1 );
         CloseHandle( hkey );
     }
     msi_free( username );
@@ -996,15 +874,15 @@ static VOID set_installer_properties(MSIPACKAGE *package)
     set_msi_assembly_prop( package );
 
     langid = GetUserDefaultLangID();
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szIntFormat, langid );
-    msi_set_property( package->db, szUserLanguageID, bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%d", langid );
+    msi_set_property( package->db, L"UserLanguageID", bufstr, len );
 
     langid = GetSystemDefaultLangID();
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szIntFormat, langid );
-    msi_set_property( package->db, szSystemLangID, bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%d", langid );
+    msi_set_property( package->db, L"SystemLanguageID", bufstr, len );
 
-    len = swprintf( bufstr, ARRAY_SIZE(bufstr), szIntFormat, MsiQueryProductStateW(package->ProductCode) );
-    msi_set_property( package->db, szProductState, bufstr, len );
+    len = swprintf( bufstr, ARRAY_SIZE(bufstr), L"%d", MsiQueryProductStateW(package->ProductCode) );
+    msi_set_property( package->db, L"ProductState", bufstr, len );
 
     len = 0;
     if (!GetUserNameW( NULL, &len ) && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
@@ -1013,7 +891,7 @@ static VOID set_installer_properties(MSIPACKAGE *package)
         if ((username = msi_alloc( len * sizeof(WCHAR) )))
         {
             if (GetUserNameW( username, &len ))
-                msi_set_property( package->db, szLogonUser, username, len - 1 );
+                msi_set_property( package->db, L"LogonUser", username, len - 1 );
             msi_free( username );
         }
     }
@@ -1024,7 +902,7 @@ static VOID set_installer_properties(MSIPACKAGE *package)
         if ((computername = msi_alloc( len * sizeof(WCHAR) )))
         {
             if (GetComputerNameW( computername, &len ))
-                msi_set_property( package->db, szComputerName, computername, len );
+                msi_set_property( package->db, L"ComputerName", computername, len );
             msi_free( computername );
         }
     }
@@ -1066,9 +944,7 @@ static UINT msi_load_admin_properties(MSIPACKAGE *package)
     BYTE *data;
     UINT r, sz;
 
-    static const WCHAR stmname[] = {'A','d','m','i','n','P','r','o','p','e','r','t','i','e','s',0};
-
-    r = read_stream_data(package->db->storage, stmname, FALSE, &data, &sz);
+    r = read_stream_data(package->db->storage, L"AdminProperties", FALSE, &data, &sz);
     if (r != ERROR_SUCCESS)
         return r;
 
@@ -1081,17 +957,16 @@ static UINT msi_load_admin_properties(MSIPACKAGE *package)
 void msi_adjust_privilege_properties( MSIPACKAGE *package )
 {
     /* FIXME: this should depend on the user's privileges */
-    if (msi_get_property_int( package->db, szAllUsers, 0 ) == 2)
+    if (msi_get_property_int( package->db, L"ALLUSERS", 0 ) == 2)
     {
         TRACE("resetting ALLUSERS property from 2 to 1\n");
-        msi_set_property( package->db, szAllUsers, szOne, -1 );
+        msi_set_property( package->db, L"ALLUSERS", L"1", -1 );
     }
-    msi_set_property( package->db, szAdminUser, szOne, -1 );
+    msi_set_property( package->db, L"AdminUser", L"1", -1 );
 }
 
 MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db )
 {
-    static const WCHAR fmtW[] = {'%','u',0};
     MSIPACKAGE *package;
     WCHAR uilevel[11];
     int len;
@@ -1115,13 +990,13 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db )
         msi_clone_properties( package->db );
         msi_adjust_privilege_properties( package );
 
-        package->ProductCode = msi_dup_property( package->db, szProductCode );
+        package->ProductCode = msi_dup_property( package->db, L"ProductCode" );
 
         set_installer_properties( package );
 
         package->ui_level = gUILevel;
-        len = swprintf( uilevel, ARRAY_SIZE(uilevel), fmtW, gUILevel & INSTALLUILEVEL_MASK );
-        msi_set_property( package->db, szUILevel, uilevel, len );
+        len = swprintf( uilevel, ARRAY_SIZE(uilevel), L"%u", gUILevel & INSTALLUILEVEL_MASK );
+        msi_set_property( package->db, L"UILevel", uilevel, len );
 
         r = msi_load_suminfo_properties( package );
         if (r != ERROR_SUCCESS)
@@ -1177,21 +1052,18 @@ UINT msi_download_file( LPCWSTR szUrl, LPWSTR filename )
 
 UINT msi_create_empty_local_file( LPWSTR path, LPCWSTR suffix )
 {
-    static const WCHAR szInstaller[] = {
-        '\\','I','n','s','t','a','l','l','e','r','\\',0};
-    static const WCHAR fmt[] = {'%','x',0};
     DWORD time, len, i, offset;
     HANDLE handle;
 
     time = GetTickCount();
     GetWindowsDirectoryW( path, MAX_PATH );
-    lstrcatW( path, szInstaller );
+    lstrcatW( path, L"\\Installer\\" );
     CreateDirectoryW( path, NULL );
 
     len = lstrlenW(path);
     for (i = 0; i < 0x10000; i++)
     {
-        offset = swprintf( path + len, MAX_PATH - len, fmt, (time + i) & 0xffff );
+        offset = swprintf( path + len, MAX_PATH - len, L"%x", (time + i) & 0xffff );
         memcpy( path + len + offset, suffix, (lstrlenW( suffix ) + 1) * sizeof(WCHAR) );
         handle = CreateFileW( path, GENERIC_WRITE, 0, NULL,
                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0 );
@@ -1210,11 +1082,11 @@ UINT msi_create_empty_local_file( LPWSTR path, LPCWSTR suffix )
 
 static enum platform parse_platform( const WCHAR *str )
 {
-    if (!str[0] || !wcscmp( str, szIntel )) return PLATFORM_INTEL;
-    else if (!wcscmp( str, szIntel64 )) return PLATFORM_INTEL64;
-    else if (!wcscmp( str, szX64 ) || !wcscmp( str, szAMD64 )) return PLATFORM_X64;
-    else if (!wcscmp( str, szARM )) return PLATFORM_ARM;
-    else if (!wcscmp( str, szARM64 )) return PLATFORM_ARM64;
+    if (!str[0] || !wcscmp( str, L"Intel" )) return PLATFORM_INTEL;
+    else if (!wcscmp( str, L"Intel64" )) return PLATFORM_INTEL64;
+    else if (!wcscmp( str, L"x64" ) || !wcscmp( str, L"AMD64" )) return PLATFORM_X64;
+    else if (!wcscmp( str, L"Arm" )) return PLATFORM_ARM;
+    else if (!wcscmp( str, L"Arm64" )) return PLATFORM_ARM64;
     return PLATFORM_UNRECOGNIZED;
 }
 
@@ -1332,17 +1204,12 @@ static UINT validate_package( MSIPACKAGE *package )
 
 static WCHAR *get_property( MSIDATABASE *db, const WCHAR *prop )
 {
-    static const WCHAR select_query[] = {
-        'S','E','L','E','C','T',' ','`','V','a','l','u','e','`',' ',
-        'F','R','O','M',' ','`','P','r','o','p','e','r','t','y','`',' ',
-        'W','H','E','R','E',' ','`','P','r','o','p','e','r','t','y','`','=',
-        '\'','%','s','\'',0};
     WCHAR query[MAX_PATH];
     MSIQUERY *view;
     MSIRECORD *rec;
     WCHAR *ret = NULL;
 
-    swprintf(query, ARRAY_SIZE(query), select_query, prop);
+    swprintf(query, ARRAY_SIZE(query), L"SELECT `Value` FROM `Property` WHERE `Property`='%s'", prop);
     if (MSI_DatabaseOpenViewW( db, query, &view ) != ERROR_SUCCESS)
     {
         return NULL;
@@ -1365,12 +1232,12 @@ static WCHAR *get_property( MSIDATABASE *db, const WCHAR *prop )
 
 static WCHAR *get_product_code( MSIDATABASE *db )
 {
-    return get_property( db, szProductCode );
+    return get_property( db, L"ProductCode" );
 }
 
 static WCHAR *get_product_version( MSIDATABASE *db )
 {
-    return get_property( db, szProductVersion );
+    return get_property( db, L"ProductVersion" );
 }
 
 static UINT get_registered_local_package( const WCHAR *product, WCHAR *localfile )
@@ -1436,9 +1303,9 @@ UINT msi_set_original_database_property( MSIDATABASE *db, const WCHAR *package )
     UINT r;
 
     if (UrlIsW( package, URLIS_URL ))
-        r = msi_set_property( db, szOriginalDatabase, package, -1 );
+        r = msi_set_property( db, L"OriginalDatabase", package, -1 );
     else if (package[0] == '#')
-        r = msi_set_property( db, szOriginalDatabase, db->path, -1 );
+        r = msi_set_property( db, L"OriginalDatabase", db->path, -1 );
     else
     {
         DWORD len;
@@ -1447,7 +1314,7 @@ UINT msi_set_original_database_property( MSIDATABASE *db, const WCHAR *package )
         if (!(len = GetFullPathNameW( package, 0, NULL, NULL ))) return GetLastError();
         if (!(path = msi_alloc( len * sizeof(WCHAR) ))) return ERROR_OUTOFMEMORY;
         len = GetFullPathNameW( package, len, path, NULL );
-        r = msi_set_property( db, szOriginalDatabase, path, len );
+        r = msi_set_property( db, L"OriginalDatabase", path, len );
         msi_free( path );
     }
     return r;
@@ -1455,7 +1322,6 @@ UINT msi_set_original_database_property( MSIDATABASE *db, const WCHAR *package )
 
 UINT MSI_OpenPackageW(LPCWSTR szPackage, DWORD dwOptions, MSIPACKAGE **pPackage)
 {
-    static const WCHAR dotmsi[] = {'.','m','s','i',0};
     MSIDATABASE *db;
     MSIPACKAGE *package;
     MSIHANDLE handle;
@@ -1502,7 +1368,7 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, DWORD dwOptions, MSIPACKAGE **pPackage)
         r = get_local_package( db, localfile );
         if (r != ERROR_SUCCESS || GetFileAttributesW( localfile ) == INVALID_FILE_ATTRIBUTES)
         {
-            r = msi_create_empty_local_file( localfile, dotmsi );
+            r = msi_create_empty_local_file( localfile, L".msi" );
             if (r != ERROR_SUCCESS)
             {
                 msiobj_release( &db->hdr );
@@ -1583,7 +1449,7 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, DWORD dwOptions, MSIPACKAGE **pPackage)
         msiobj_release( &package->hdr );
         return r;
     }
-    msi_set_property( package->db, szDatabase, db->path, -1 );
+    msi_set_property( package->db, L"DATABASE", db->path, -1 );
     set_installed_prop( package );
     msi_set_context( package );
 
@@ -1591,7 +1457,7 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, DWORD dwOptions, MSIPACKAGE **pPackage)
     if (msi_locate_product( product_code, &context ) == ERROR_SUCCESS)
     {
         TRACE("product already registered\n");
-        msi_set_property( package->db, szProductToBeRegistered, szOne, -1 );
+        msi_set_property( package->db, L"ProductToBeRegistered", L"1", -1 );
     }
     msi_free(product_code);
 
@@ -1765,12 +1631,6 @@ MSIHANDLE WINAPI MsiGetActiveDatabase(MSIHANDLE hInstall)
 
 static INT internal_ui_handler(MSIPACKAGE *package, INSTALLMESSAGE eMessageType, MSIRECORD *record, LPCWSTR message)
 {
-    static const WCHAR szActionData[] = {'A','c','t','i','o','n','D','a','t','a',0};
-    static const WCHAR szActionText[] = {'A','c','t','i','o','n','T','e','x','t',0};
-    static const WCHAR szSetProgress[] = {'S','e','t','P','r','o','g','r','e','s','s',0};
-    static const WCHAR szWindows_Installer[] =
-        {'W','i','n','d','o','w','s',' ','I','n','s','t','a','l','l','e','r',0};
-
     if (!package || (package->ui_level & INSTALLUILEVEL_MASK) == INSTALLUILEVEL_NONE)
         return 0;
 
@@ -1784,17 +1644,17 @@ static INT internal_ui_handler(MSIPACKAGE *package, INSTALLMESSAGE eMessageType,
         if (package->ui_level & INSTALLUILEVEL_PROGRESSONLY) return 0;
         if (!(eMessageType & MB_ICONMASK))
             eMessageType |= MB_ICONEXCLAMATION;
-        return MessageBoxW(gUIhwnd, message, szWindows_Installer, eMessageType & 0x00ffffff);
+        return MessageBoxW(gUIhwnd, message, L"Windows Installer", eMessageType & 0x00ffffff);
     case INSTALLMESSAGE_WARNING:
         if (package->ui_level & INSTALLUILEVEL_PROGRESSONLY) return 0;
         if (!(eMessageType & MB_ICONMASK))
             eMessageType |= MB_ICONASTERISK;
-        return MessageBoxW(gUIhwnd, message, szWindows_Installer, eMessageType & 0x00ffffff);
+        return MessageBoxW(gUIhwnd, message, L"Windows Installer", eMessageType & 0x00ffffff);
     case INSTALLMESSAGE_USER:
         if (package->ui_level & INSTALLUILEVEL_PROGRESSONLY) return 0;
         if (!(eMessageType & MB_ICONMASK))
             eMessageType |= MB_USERICON;
-        return MessageBoxW(gUIhwnd, message, szWindows_Installer, eMessageType & 0x00ffffff);
+        return MessageBoxW(gUIhwnd, message, L"Windows Installer", eMessageType & 0x00ffffff);
     case INSTALLMESSAGE_INFO:
     case INSTALLMESSAGE_INITIALIZE:
     case INSTALLMESSAGE_TERMINATE:
@@ -1815,7 +1675,7 @@ static INT internal_ui_handler(MSIPACKAGE *package, INSTALLMESSAGE eMessageType,
         if (!uirow) return -1;
         deformat_string(package, MSI_RecordGetString(record, 2), &deformatted);
         MSI_RecordSetStringW(uirow, 1, deformatted);
-        msi_event_fire(package, szActionText, uirow);
+        msi_event_fire(package, L"ActionText", uirow);
 
         msi_free(deformatted);
         msiobj_release(&uirow->hdr);
@@ -1826,7 +1686,7 @@ static INT internal_ui_handler(MSIPACKAGE *package, INSTALLMESSAGE eMessageType,
         MSIRECORD *uirow = MSI_CreateRecord(1);
         if (!uirow) return -1;
         MSI_RecordSetStringW(uirow, 1, message);
-        msi_event_fire(package, szActionData, uirow);
+        msi_event_fire(package, L"ActionData", uirow);
         msiobj_release(&uirow->hdr);
 
         if (package->action_progress_increment)
@@ -1835,13 +1695,13 @@ static INT internal_ui_handler(MSIPACKAGE *package, INSTALLMESSAGE eMessageType,
             if (!uirow) return -1;
             MSI_RecordSetInteger(uirow, 1, 2);
             MSI_RecordSetInteger(uirow, 2, package->action_progress_increment);
-            msi_event_fire(package, szSetProgress, uirow);
+            msi_event_fire(package, L"SetProgress", uirow);
             msiobj_release(&uirow->hdr);
         }
         return 1;
     }
     case INSTALLMESSAGE_PROGRESS:
-        msi_event_fire(package, szSetProgress, record);
+        msi_event_fire(package, L"SetProgress", record);
         return 1;
     case INSTALLMESSAGE_COMMONDATA:
         switch (MSI_RecordGetInteger(record, 1))
@@ -1860,8 +1720,6 @@ static INT internal_ui_handler(MSIPACKAGE *package, INSTALLMESSAGE eMessageType,
     }
 }
 
-static const WCHAR szActionNotFound[] = {'D','E','B','U','G',':',' ','E','r','r','o','r',' ','[','1',']',':',' ',' ','A','c','t','i','o','n',' ','n','o','t',' ','f','o','u','n','d',':',' ','[','2',']',0};
-
 static const struct
 {
     int id;
@@ -1869,7 +1727,7 @@ static const struct
 }
 internal_errors[] =
 {
-    {2726, szActionNotFound},
+    {2726, L"DEBUG: Error [1]:  Action not found: [2]"},
     {0}
 };
 
@@ -1891,14 +1749,10 @@ static LPCWSTR get_internal_error_message(int error)
 /* Returned string must be freed */
 LPWSTR msi_get_error_message(MSIDATABASE *db, int error)
 {
-    static const WCHAR query[] =
-        {'S','E','L','E','C','T',' ','`','M','e','s','s','a','g','e','`',' ',
-         'F','R','O','M',' ','`','E','r','r','o','r','`',' ','W','H','E','R','E',' ',
-         '`','E','r','r','o','r','`',' ','=',' ','%','i',0};
     MSIRECORD *record;
     LPWSTR ret = NULL;
 
-    if ((record = MSI_QueryGetRecord(db, query, error)))
+    if ((record = MSI_QueryGetRecord(db, L"SELECT `Message` FROM `Error` WHERE `Error` = %d", error)))
     {
         ret = msi_dup_record_field(record, 1);
         msiobj_release(&record->hdr);
@@ -2028,7 +1882,7 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, MSIREC
                 template_rec = msi_dup_record_field(record, 0);
 
             template_prefix = msi_get_error_message(package->db, eMessageType >> 24);
-            if (!template_prefix) template_prefix = strdupW(szEmpty);
+            if (!template_prefix) template_prefix = strdupW(L"");
 
             if (!template_rec)
             {
@@ -2060,19 +1914,17 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, MSIREC
         msi_free(package->LastAction);
         msi_free(package->LastActionTemplate);
         package->LastAction = msi_dup_record_field(record, 1);
-        if (!package->LastAction) package->LastAction = strdupW(szEmpty);
+        if (!package->LastAction) package->LastAction = strdupW(L"");
         package->LastActionTemplate = msi_dup_record_field(record, 3);
         break;
     }
     case INSTALLMESSAGE_ACTIONDATA:
         if (package->LastAction && package->LastActionTemplate)
         {
-            static const WCHAR template_s[] =
-                {'{','{','%','s',':',' ','}','}','%','s',0};
             size_t len = lstrlenW(package->LastAction) + lstrlenW(package->LastActionTemplate) + 7;
             WCHAR *template = msi_alloc(len * sizeof(WCHAR));
             if (!template) return ERROR_OUTOFMEMORY;
-            swprintf(template, len, template_s, package->LastAction, package->LastActionTemplate);
+            swprintf(template, len, L"{{%s: }}%s", package->LastAction, package->LastActionTemplate);
             MSI_RecordSetStringW(record, 0, template);
             msi_free(template);
         }
@@ -2174,19 +2026,6 @@ void msi_reset_source_folders( MSIPACKAGE *package )
 
 UINT msi_set_property( MSIDATABASE *db, const WCHAR *name, const WCHAR *value, int len )
 {
-    static const WCHAR insert_query[] = {
-        'I','N','S','E','R','T',' ','I','N','T','O',' ',
-        '`','_','P','r','o','p','e','r','t','y','`',' ',
-        '(','`','_','P','r','o','p','e','r','t','y','`',',','`','V','a','l','u','e','`',')',' ',
-        'V','A','L','U','E','S',' ','(','?',',','?',')',0};
-    static const WCHAR update_query[] = {
-        'U','P','D','A','T','E',' ','`','_','P','r','o','p','e','r','t','y','`',' ',
-        'S','E','T',' ','`','V','a','l','u','e','`',' ','=',' ','?',' ','W','H','E','R','E',' ',
-        '`','_','P','r','o','p','e','r','t','y','`',' ','=',' ','\'','%','s','\'',0};
-    static const WCHAR delete_query[] = {
-        'D','E','L','E','T','E',' ','F','R','O','M',' ',
-        '`','_','P','r','o','p','e','r','t','y','`',' ','W','H','E','R','E',' ',
-        '`','_','P','r','o','p','e','r','t','y','`',' ','=',' ','\'','%','s','\'',0};
     MSIQUERY *view;
     MSIRECORD *row = NULL;
     DWORD sz = 0;
@@ -2207,17 +2046,17 @@ UINT msi_set_property( MSIDATABASE *db, const WCHAR *name, const WCHAR *value, i
     rc = msi_get_property( db, name, 0, &sz );
     if (!value || (!*value && !len))
     {
-        swprintf( query, ARRAY_SIZE(query), delete_query, name );
+        swprintf( query, ARRAY_SIZE(query), L"DELETE FROM `_Property` WHERE `_Property` = '%s'", name );
     }
     else if (rc == ERROR_MORE_DATA || rc == ERROR_SUCCESS)
     {
-        swprintf( query, ARRAY_SIZE(query), update_query, name );
+        swprintf( query, ARRAY_SIZE(query), L"UPDATE `_Property` SET `Value` = ? WHERE `_Property` = '%s'", name );
         row = MSI_CreateRecord(1);
         msi_record_set_string( row, 1, value, len );
     }
     else
     {
-        lstrcpyW( query, insert_query );
+        lstrcpyW( query, L"INSERT INTO `_Property` (`_Property`,`Value`) VALUES (?,?)" );
         row = MSI_CreateRecord(2);
         msi_record_set_string( row, 1, name, -1 );
         msi_record_set_string( row, 2, value, len );
@@ -2261,7 +2100,7 @@ UINT WINAPI MsiSetPropertyW( MSIHANDLE hInstall, LPCWSTR szName, LPCWSTR szValue
     }
 
     ret = msi_set_property( package->db, szName, szValue, -1 );
-    if (ret == ERROR_SUCCESS && !wcscmp( szName, szSourceDir ))
+    if (ret == ERROR_SUCCESS && !wcscmp( szName, L"SourceDir" ))
         msi_reset_source_folders( package );
 
     msiobj_release( &package->hdr );
@@ -2270,23 +2109,16 @@ UINT WINAPI MsiSetPropertyW( MSIHANDLE hInstall, LPCWSTR szName, LPCWSTR szValue
 
 static MSIRECORD *msi_get_property_row( MSIDATABASE *db, LPCWSTR name )
 {
-    static const WCHAR query[]= {
-        'S','E','L','E','C','T',' ','`','V','a','l','u','e','`',' ',
-        'F','R','O','M',' ' ,'`','_','P','r','o','p','e','r','t','y','`',' ',
-        'W','H','E','R','E',' ' ,'`','_','P','r','o','p','e','r','t','y','`','=','?',0};
     MSIRECORD *rec, *row = NULL;
     MSIQUERY *view;
     UINT r;
-
-    static const WCHAR szDate[] = {'D','a','t','e',0};
-    static const WCHAR szTime[] = {'T','i','m','e',0};
     WCHAR *buffer;
     int length;
 
     if (!name || !*name)
         return NULL;
 
-    if (!wcscmp(name, szDate))
+    if (!wcscmp(name, L"Date"))
     {
         length = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, NULL, NULL, NULL, 0);
         if (!length)
@@ -2304,7 +2136,7 @@ static MSIRECORD *msi_get_property_row( MSIDATABASE *db, LPCWSTR name )
         msi_free(buffer);
         return row;
     }
-    else if (!wcscmp(name, szTime))
+    else if (!wcscmp(name, L"Time"))
     {
         length = GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOTIMEMARKER, NULL, NULL, NULL, 0);
         if (!length)
@@ -2329,7 +2161,7 @@ static MSIRECORD *msi_get_property_row( MSIDATABASE *db, LPCWSTR name )
 
     MSI_RecordSetStringW(rec, 1, name);
 
-    r = MSI_DatabaseOpenViewW(db, query, &view);
+    r = MSI_DatabaseOpenViewW(db, L"SELECT `Value` FROM `_Property` WHERE `_Property`=?", &view);
     if (r == ERROR_SUCCESS)
     {
         MSI_ViewExecute(view, rec);
@@ -2408,7 +2240,7 @@ int msi_get_property_int( MSIDATABASE *db, LPCWSTR prop, int def )
 
 UINT WINAPI MsiGetPropertyA(MSIHANDLE hinst, const char *name, char *buf, DWORD *sz)
 {
-    const WCHAR *value = szEmpty;
+    const WCHAR *value = L"";
     MSIPACKAGE *package;
     MSIRECORD *row;
     WCHAR *nameW;
@@ -2480,7 +2312,7 @@ UINT WINAPI MsiGetPropertyA(MSIHANDLE hinst, const char *name, char *buf, DWORD
 
 UINT WINAPI MsiGetPropertyW(MSIHANDLE hinst, const WCHAR *name, WCHAR *buf, DWORD *sz)
 {
-    const WCHAR *value = szEmpty;
+    const WCHAR *value = L"";
     MSIPACKAGE *package;
     MSIRECORD *row;
     int len = 0;
-- 
2.28.0




More information about the wine-devel mailing list