[PATCH] msi: Use wide character string literals in action.c.

Hans Leidekker hans at codeweavers.com
Tue Oct 27 05:31:41 CDT 2020


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/msi/action.c | 1340 ++++++++++++++-------------------------------
 1 file changed, 407 insertions(+), 933 deletions(-)

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index d02860e4d71..ed1d0c8ffcc 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -46,126 +46,12 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(msi);
 
-static const WCHAR szCreateFolders[] =
-    {'C','r','e','a','t','e','F','o','l','d','e','r','s',0};
-static const WCHAR szCostFinalize[] =
-    {'C','o','s','t','F','i','n','a','l','i','z','e',0};
-static const WCHAR szWriteRegistryValues[] =
-    {'W','r','i','t','e','R','e','g','i','s','t','r','y','V','a','l','u','e','s',0};
-static const WCHAR szFileCost[] = 
-    {'F','i','l','e','C','o','s','t',0};
-static const WCHAR szInstallInitialize[] = 
-    {'I','n','s','t','a','l','l','I','n','i','t','i','a','l','i','z','e',0};
-static const WCHAR szInstallValidate[] = 
-    {'I','n','s','t','a','l','l','V','a','l','i','d','a','t','e',0};
-static const WCHAR szLaunchConditions[] = 
-    {'L','a','u','n','c','h','C','o','n','d','i','t','i','o','n','s',0};
-static const WCHAR szProcessComponents[] = 
-    {'P','r','o','c','e','s','s','C','o','m','p','o','n','e','n','t','s',0};
-static const WCHAR szRegisterTypeLibraries[] = 
-    {'R','e','g','i','s','t','e','r','T','y','p','e','L','i','b','r','a','r','i','e','s',0};
-static const WCHAR szCreateShortcuts[] = 
-    {'C','r','e','a','t','e','S','h','o','r','t','c','u','t','s',0};
-static const WCHAR szPublishProduct[] = 
-    {'P','u','b','l','i','s','h','P','r','o','d','u','c','t',0};
-static const WCHAR szWriteIniValues[] = 
-    {'W','r','i','t','e','I','n','i','V','a','l','u','e','s',0};
-static const WCHAR szSelfRegModules[] = 
-    {'S','e','l','f','R','e','g','M','o','d','u','l','e','s',0};
-static const WCHAR szPublishFeatures[] = 
-    {'P','u','b','l','i','s','h','F','e','a','t','u','r','e','s',0};
-static const WCHAR szRegisterProduct[] = 
-    {'R','e','g','i','s','t','e','r','P','r','o','d','u','c','t',0};
-static const WCHAR szInstallExecute[] = 
-    {'I','n','s','t','a','l','l','E','x','e','c','u','t','e',0};
-static const WCHAR szInstallExecuteAgain[] = 
-    {'I','n','s','t','a','l','l','E','x','e','c','u','t','e','A','g','a','i','n',0};
-static const WCHAR szInstallFinalize[] = 
-    {'I','n','s','t','a','l','l','F','i','n','a','l','i','z','e',0};
-static const WCHAR szForceReboot[] = 
-    {'F','o','r','c','e','R','e','b','o','o','t',0};
-static const WCHAR szResolveSource[] =
-    {'R','e','s','o','l','v','e','S','o','u','r','c','e',0};
-static const WCHAR szAllocateRegistrySpace[] = 
-    {'A','l','l','o','c','a','t','e','R','e','g','i','s','t','r','y','S','p','a','c','e',0};
-static const WCHAR szBindImage[] = 
-    {'B','i','n','d','I','m','a','g','e',0};
-static const WCHAR szDeleteServices[] = 
-    {'D','e','l','e','t','e','S','e','r','v','i','c','e','s',0};
-static const WCHAR szDisableRollback[] = 
-    {'D','i','s','a','b','l','e','R','o','l','l','b','a','c','k',0};
-static const WCHAR szExecuteAction[] = 
-    {'E','x','e','c','u','t','e','A','c','t','i','o','n',0};
-static const WCHAR szInstallAdminPackage[] = 
-    {'I','n','s','t','a','l','l','A','d','m','i','n','P','a','c','k','a','g','e',0};
-static const WCHAR szInstallSFPCatalogFile[] = 
-    {'I','n','s','t','a','l','l','S','F','P','C','a','t','a','l','o','g','F','i','l','e',0};
-static const WCHAR szIsolateComponents[] = 
-    {'I','s','o','l','a','t','e','C','o','m','p','o','n','e','n','t','s',0};
-static const WCHAR szMigrateFeatureStates[] =
-    {'M','i','g','r','a','t','e','F','e','a','t','u','r','e','S','t','a','t','e','s',0};
-static const WCHAR szInstallODBC[] = 
-    {'I','n','s','t','a','l','l','O','D','B','C',0};
-static const WCHAR szInstallServices[] = 
-    {'I','n','s','t','a','l','l','S','e','r','v','i','c','e','s',0};
-static const WCHAR szPublishComponents[] = 
-    {'P','u','b','l','i','s','h','C','o','m','p','o','n','e','n','t','s',0};
-static const WCHAR szRegisterComPlus[] =
-    {'R','e','g','i','s','t','e','r','C','o','m','P','l','u','s',0};
-static const WCHAR szRegisterUser[] =
-    {'R','e','g','i','s','t','e','r','U','s','e','r',0};
-static const WCHAR szRemoveEnvironmentStrings[] =
-    {'R','e','m','o','v','e','E','n','v','i','r','o','n','m','e','n','t','S','t','r','i','n','g','s',0};
-static const WCHAR szRemoveExistingProducts[] =
-    {'R','e','m','o','v','e','E','x','i','s','t','i','n','g','P','r','o','d','u','c','t','s',0};
-static const WCHAR szRemoveFolders[] =
-    {'R','e','m','o','v','e','F','o','l','d','e','r','s',0};
-static const WCHAR szRemoveIniValues[] =
-    {'R','e','m','o','v','e','I','n','i','V','a','l','u','e','s',0};
-static const WCHAR szRemoveODBC[] =
-    {'R','e','m','o','v','e','O','D','B','C',0};
-static const WCHAR szRemoveRegistryValues[] =
-    {'R','e','m','o','v','e','R','e','g','i','s','t','r','y','V','a','l','u','e','s',0};
-static const WCHAR szRemoveShortcuts[] =
-    {'R','e','m','o','v','e','S','h','o','r','t','c','u','t','s',0};
-static const WCHAR szRMCCPSearch[] =
-    {'R','M','C','C','P','S','e','a','r','c','h',0};
-static const WCHAR szScheduleReboot[] =
-    {'S','c','h','e','d','u','l','e','R','e','b','o','o','t',0};
-static const WCHAR szSelfUnregModules[] =
-    {'S','e','l','f','U','n','r','e','g','M','o','d','u','l','e','s',0};
-static const WCHAR szSetODBCFolders[] =
-    {'S','e','t','O','D','B','C','F','o','l','d','e','r','s',0};
-static const WCHAR szStartServices[] =
-    {'S','t','a','r','t','S','e','r','v','i','c','e','s',0};
-static const WCHAR szStopServices[] =
-    {'S','t','o','p','S','e','r','v','i','c','e','s',0};
-static const WCHAR szUnpublishComponents[] =
-    {'U','n','p','u','b','l','i','s','h', 'C','o','m','p','o','n','e','n','t','s',0};
-static const WCHAR szUnpublishFeatures[] =
-    {'U','n','p','u','b','l','i','s','h','F','e','a','t','u','r','e','s',0};
-static const WCHAR szUnpublishProduct[] =
-    {'U','n','p','u','b','l','i','s','h','P','r','o','d','u','c','t',0};
-static const WCHAR szUnregisterComPlus[] =
-    {'U','n','r','e','g','i','s','t','e','r','C','o','m','P','l','u','s',0};
-static const WCHAR szUnregisterTypeLibraries[] =
-    {'U','n','r','e','g','i','s','t','e','r','T','y','p','e','L','i','b','r','a','r','i','e','s',0};
-static const WCHAR szValidateProductID[] =
-    {'V','a','l','i','d','a','t','e','P','r','o','d','u','c','t','I','D',0};
-static const WCHAR szWriteEnvironmentStrings[] =
-    {'W','r','i','t','e','E','n','v','i','r','o','n','m','e','n','t','S','t','r','i','n','g','s',0};
-static const WCHAR szINSTALL[] =
-    {'I','N','S','T','A','L','L',0};
-
 static INT ui_actionstart(MSIPACKAGE *package, LPCWSTR action, LPCWSTR description, LPCWSTR template)
 {
-    static const WCHAR query[] = {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','A','c','t','i','o','n','T','e','x','t','`',' ','W','H','E','R','E',' ',
-        '`','A','c','t','i','o','n','`',' ','=',' ','\'','%','s','\'',0};
     MSIRECORD *row, *textrow;
     INT rc;
 
-    textrow = MSI_QueryGetRecord(package->db, query, action);
+    textrow = MSI_QueryGetRecord(package->db, L"SELECT * FROM `ActionText` WHERE `Action` = '%s'", action);
     if (textrow)
     {
         description = MSI_RecordGetString(textrow, 2);
@@ -366,7 +252,7 @@ UINT msi_parse_command_line( MSIPACKAGE *package, LPCWSTR szCommandLine,
         TRACE("Found commandline property %s = %s\n", debugstr_w(prop), debugstr_w(val));
 
         r = msi_set_property( package->db, prop, val, -1 );
-        if (r == ERROR_SUCCESS && !wcscmp( prop, szSourceDir ))
+        if (r == ERROR_SUCCESS && !wcscmp( prop, L"SourceDir" ))
             msi_reset_source_folders( package );
 
         msi_free( val );
@@ -447,14 +333,10 @@ WCHAR **msi_split_string( const WCHAR *str, WCHAR sep )
 
 static BOOL ui_sequence_exists( MSIPACKAGE *package )
 {
-    static const WCHAR query [] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','I','n','s','t','a','l','l','U','I','S','e','q','u','e','n','c','e','`',' ',
-        'W','H','E','R','E',' ','`','S','e','q','u','e','n','c','e','`',' ','>',' ','0',0};
     MSIQUERY *view;
     DWORD count = 0;
 
-    if (!(MSI_DatabaseOpenViewW( package->db, query, &view )))
+    if (!(MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `InstallUISequence` WHERE `Sequence` > 0", &view )))
     {
         MSI_IterateRecords( view, &count, NULL, package );
         msiobj_release( &view->hdr );
@@ -467,7 +349,7 @@ UINT msi_set_sourcedir_props(MSIPACKAGE *package, BOOL replace)
     WCHAR *source, *check, *p, *db;
     DWORD len;
 
-    if (!(db = msi_dup_property( package->db, szOriginalDatabase )))
+    if (!(db = msi_dup_property( package->db, L"OriginalDatabase" )))
         return ERROR_OUTOFMEMORY;
 
     if (!(p = wcsrchr( db, '\\' )) && !(p = wcsrchr( db, '/' )))
@@ -480,18 +362,18 @@ UINT msi_set_sourcedir_props(MSIPACKAGE *package, BOOL replace)
     lstrcpynW( source, db, len );
     msi_free( db );
 
-    check = msi_dup_property( package->db, szSourceDir );
+    check = msi_dup_property( package->db, L"SourceDir" );
     if (!check || replace)
     {
-        UINT r = msi_set_property( package->db, szSourceDir, source, -1 );
+        UINT r = msi_set_property( package->db, L"SourceDir", source, -1 );
         if (r == ERROR_SUCCESS)
             msi_reset_source_folders( package );
     }
     msi_free( check );
 
-    check = msi_dup_property( package->db, szSOURCEDIR );
+    check = msi_dup_property( package->db, L"SOURCEDIR" );
     if (!check || replace)
-        msi_set_property( package->db, szSOURCEDIR, source, -1 );
+        msi_set_property( package->db, L"SOURCEDIR", source, -1 );
 
     msi_free( check );
     msi_free( source );
@@ -509,7 +391,7 @@ UINT msi_set_context(MSIPACKAGE *package)
     UINT r = msi_locate_product( package->ProductCode, &package->Context );
     if (r != ERROR_SUCCESS)
     {
-        int num = msi_get_property_int( package->db, szAllUsers, 0 );
+        int num = msi_get_property_int( package->db, L"ALLUSERS", 0 );
         if (num == 1 || num == 2)
             package->Context = MSIINSTALLCONTEXT_MACHINE;
         else
@@ -562,17 +444,12 @@ static UINT ITERATE_Actions(MSIRECORD *row, LPVOID param)
 
 UINT MSI_Sequence( MSIPACKAGE *package, LPCWSTR table )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','%','s','`',
-         ' ','W','H','E','R','E',' ','`','S','e','q','u','e','n','c','e','`',' ',
-         '>',' ','0',' ','O','R','D','E','R',' ','B','Y',' ',
-         '`','S','e','q','u','e','n','c','e','`',0};
     MSIQUERY *view;
     UINT r;
 
     TRACE("%p %s\n", package, debugstr_w(table));
 
-    r = MSI_OpenQuery( package->db, &view, query, table );
+    r = MSI_OpenQuery( package->db, &view, L"SELECT * FROM `%s` WHERE `Sequence` > 0 ORDER BY `Sequence`", table );
     if (r == ERROR_SUCCESS)
     {
         r = MSI_IterateRecords( view, NULL, ITERATE_Actions, package );
@@ -583,12 +460,6 @@ UINT MSI_Sequence( MSIPACKAGE *package, LPCWSTR table )
 
 static UINT ACTION_ProcessExecSequence(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ', 'F','R','O','M',' ',
-        '`','I','n','s','t','a','l','l','E','x','e','c','u','t','e',
-        'S','e','q','u','e','n','c','e','`',' ', 'W','H','E','R','E',' ',
-        '`','S','e','q','u','e','n','c','e','`',' ', '>',' ','0',' ',
-        'O','R','D','E','R',' ', 'B','Y',' ','`','S','e','q','u','e','n','c','e','`',0};
     MSIQUERY *view;
     UINT rc;
 
@@ -600,12 +471,13 @@ static UINT ACTION_ProcessExecSequence(MSIPACKAGE *package)
 
     package->ExecuteSequenceRun = TRUE;
 
-    rc = MSI_OpenQuery(package->db, &view, query);
+    rc = MSI_OpenQuery(package->db, &view,
+                       L"SELECT * FROM `InstallExecuteSequence` WHERE `Sequence` > 0 ORDER BY `Sequence`");
     if (rc == ERROR_SUCCESS)
     {
         TRACE("Running the actions\n");
 
-        msi_set_property( package->db, szSourceDir, NULL, -1 );
+        msi_set_property( package->db, L"SourceDir", NULL, -1 );
         rc = MSI_IterateRecords(view, NULL, ITERATE_Actions, package);
         msiobj_release(&view->hdr);
     }
@@ -614,18 +486,15 @@ static UINT ACTION_ProcessExecSequence(MSIPACKAGE *package)
 
 static UINT ACTION_ProcessUISequence(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','I','n','s','t','a','l','l','U','I','S','e','q','u','e','n','c','e','`',' ',
-        'W','H','E','R','E',' ','`','S','e','q','u','e','n','c','e','`',' ','>',' ','0',' ',
-        'O','R','D','E','R',' ','B','Y',' ','`','S','e','q','u','e','n','c','e','`',0};
     MSIQUERY *view;
     UINT rc;
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db,
+                               L"SELECT * FROM `InstallUISequence` WHERE `Sequence` > 0 ORDER BY `Sequence`",
+                               &view);
     if (rc == ERROR_SUCCESS)
     {
-        TRACE("Running the actions\n"); 
+        TRACE("Running the actions\n");
         rc = MSI_IterateRecords(view, NULL, ITERATE_Actions, package);
         msiobj_release(&view->hdr);
     }
@@ -806,16 +675,13 @@ static UINT ITERATE_CreateFolders(MSIRECORD *row, LPVOID param)
 
 static UINT ACTION_CreateFolders(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','C','r','e','a','t','e','F','o','l','d','e','r','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szCreateFolders);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"CreateFolders");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `CreateFolder`", &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -888,16 +754,13 @@ static UINT ITERATE_RemoveFolders( MSIRECORD *row, LPVOID param )
 
 static UINT ACTION_RemoveFolders( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','C','r','e','a','t','e','F','o','l','d','e','r','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveFolders);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RemoveFolders");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `CreateFolder`", &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -938,16 +801,13 @@ static UINT load_component( MSIRECORD *row, LPVOID param )
 
 UINT msi_load_all_components( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','C','o','m','p','o','n','e','n','t','`',0};
     MSIQUERY *view;
     UINT r;
 
     if (!list_empty(&package->components))
         return ERROR_SUCCESS;
 
-    r = MSI_DatabaseOpenViewW( package->db, query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Component`", &view );
     if (r != ERROR_SUCCESS)
         return r;
 
@@ -1008,13 +868,8 @@ static UINT iterate_load_featurecomponents(MSIRECORD *row, LPVOID param)
     return ERROR_SUCCESS;
 }
 
-static UINT load_feature(MSIRECORD * row, LPVOID param)
+static UINT load_feature(MSIRECORD *row, LPVOID param)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','`','C','o','m','p','o','n','e','n','t','_','`',
-         ' ','F','R','O','M',' ','`','F','e','a','t','u','r','e',
-         'C','o','m','p','o','n','e','n','t','s','`',' ','W','H','E','R','E',' ',
-         '`','F','e', 'a','t','u','r','e','_','`',' ','=','\'','%','s','\'',0};
     MSIPACKAGE *package = param;
     MSIFEATURE *feature;
     MSIQUERY *view;
@@ -1029,7 +884,7 @@ static UINT load_feature(MSIRECORD * row, LPVOID param)
 
     list_init( &feature->Children );
     list_init( &feature->Components );
-    
+
     feature->Feature = msi_dup_record_field( row, 1 );
 
     TRACE("Loading feature %s\n",debugstr_w(feature->Feature));
@@ -1040,7 +895,7 @@ static UINT load_feature(MSIRECORD * row, LPVOID param)
 
     if (!MSI_RecordIsNull(row,5))
         feature->Display = MSI_RecordGetInteger(row,5);
-  
+
     feature->Level= MSI_RecordGetInteger(row,6);
     feature->Directory = msi_dup_record_field( row, 7 );
     feature->Attributes = MSI_RecordGetInteger(row,8);
@@ -1053,7 +908,8 @@ static UINT load_feature(MSIRECORD * row, LPVOID param)
 
     /* load feature components */
 
-    rc = MSI_OpenQuery( package->db, &view, query, feature->Feature );
+    rc = MSI_OpenQuery( package->db, &view, L"SELECT `Component_` FROM `FeatureComponents` WHERE `Feature_` = '%s'",
+                        feature->Feature );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -1087,17 +943,13 @@ static UINT find_feature_children(MSIRECORD * row, LPVOID param)
 
 UINT msi_load_all_features( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','F','e','a','t','u','r','e','`',' ','O','R','D','E','R',' ','B','Y',' ',
-        '`','D','i','s','p','l','a','y','`',0};
     MSIQUERY *view;
     UINT r;
 
     if (!list_empty(&package->features))
         return ERROR_SUCCESS;
- 
-    r = MSI_DatabaseOpenViewW( package->db, query, &view );
+
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Feature` ORDER BY `Display`", &view );
     if (r != ERROR_SUCCESS)
         return r;
 
@@ -1125,17 +977,13 @@ static LPWSTR folder_split_path(LPWSTR p, WCHAR ch)
 
 static UINT load_file_hash(MSIPACKAGE *package, MSIFILE *file)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ', 'F','R','O','M',' ',
-        '`','M','s','i','F','i','l','e','H','a','s','h','`',' ',
-        'W','H','E','R','E',' ','`','F','i','l','e','_','`',' ','=',' ','\'','%','s','\'',0};
     MSIQUERY *view = NULL;
     MSIRECORD *row = NULL;
     UINT r;
 
     TRACE("%s\n", debugstr_w(file->File));
 
-    r = MSI_OpenQuery(package->db, &view, query, file->File);
+    r = MSI_OpenQuery(package->db, &view, L"SELECT * FROM `MsiFileHash` WHERE `File_` = '%s'", file->File);
     if (r != ERROR_SUCCESS)
         goto done;
 
@@ -1161,13 +1009,8 @@ done:
 
 static UINT load_file_disk_id( MSIPACKAGE *package, MSIFILE *file )
 {
-    MSIRECORD *row;
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','`','D','i','s','k','I','d','`',' ', 'F','R','O','M',' ',
-        '`','M','e','d','i','a','`',' ','W','H','E','R','E',' ',
-        '`','L','a','s','t','S','e','q','u','e','n','c','e','`',' ','>','=',' ','%','i',0};
-
-    row = MSI_QueryGetRecord( package->db, query, file->Sequence );
+    MSIRECORD *row = MSI_QueryGetRecord( package->db, L"SELECT `DiskId` FROM `Media` WHERE `LastSequence` >= %d",
+                                         file->Sequence );
     if (!row)
     {
         WARN("query failed\n");
@@ -1190,7 +1033,7 @@ static UINT load_file(MSIRECORD *row, LPVOID param)
     file = msi_alloc_zero( sizeof (MSIFILE) );
     if (!file)
         return ERROR_NOT_ENOUGH_MEMORY;
- 
+
     file->File = msi_dup_record_field( row, 1 );
 
     component = MSI_RecordGetString( row, 2 );
@@ -1209,7 +1052,7 @@ static UINT load_file(MSIRECORD *row, LPVOID param)
 
     file->ShortName = msi_dup_record_field( row, 3 );
     file->LongName = strdupW( folder_split_path(file->ShortName, '|'));
-    
+
     file->FileSize = MSI_RecordGetInteger( row, 4 );
     file->Version = msi_dup_record_field( row, 5 );
     file->Language = msi_dup_record_field( row, 6 );
@@ -1241,23 +1084,18 @@ static UINT load_file(MSIRECORD *row, LPVOID param)
     TRACE("File loaded (file %s sequence %u)\n", debugstr_w(file->File), file->Sequence);
 
     list_add_tail( &package->files, &file->entry );
- 
     return ERROR_SUCCESS;
 }
 
 static UINT load_all_files(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ', 'F','R','O','M',' ',
-        '`','F','i','l','e','`',' ', 'O','R','D','E','R',' ','B','Y',' ',
-        '`','S','e','q','u','e','n','c','e','`', 0};
     MSIQUERY *view;
     UINT rc;
 
     if (!list_empty(&package->files))
         return ERROR_SUCCESS;
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `File` ORDER BY `Sequence`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -1281,14 +1119,10 @@ static UINT load_media( MSIRECORD *row, LPVOID param )
 
 static UINT load_all_media( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`',
-        'M','e','d','i','a','`',' ','O','R','D','E','R',' ','B','Y',' ',
-        '`','D','i','s','k','I','d','`',0};
     MSIQUERY *view;
     UINT r;
 
-    r = MSI_DatabaseOpenViewW( package->db, query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Media` ORDER BY `DiskId`", &view );
     if (r != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -1299,13 +1133,9 @@ static UINT load_all_media( MSIPACKAGE *package )
 
 static UINT load_patch_disk_id( MSIPACKAGE *package, MSIFILEPATCH *patch )
 {
-    static const WCHAR query[] =
-        {'S','E','L','E','C','T',' ','`','D','i','s','k','I','d','`',' ', 'F','R','O','M',' ',
-         '`','M','e','d','i','a','`',' ','W','H','E','R','E',' ',
-         '`','L','a','s','t','S','e','q','u','e','n','c','e','`',' ','>','=',' ','%','u',0};
-    MSIRECORD *rec;
-
-    if (!(rec = MSI_QueryGetRecord( package->db, query, patch->Sequence )))
+    MSIRECORD *rec = MSI_QueryGetRecord( package->db, L"SELECT `DiskId` FROM `Media` WHERE `LastSequence` >= %u",
+                                         patch->Sequence );
+    if (!rec)
     {
         WARN("query failed\n");
         return ERROR_FUNCTION_FAILED;
@@ -1355,17 +1185,13 @@ static UINT load_patch(MSIRECORD *row, LPVOID param)
 
 static UINT load_all_patches(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','P','a','t','c','h','`',' ','O','R','D','E','R',' ','B','Y',' ',
-        '`','S','e','q','u','e','n','c','e','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (!list_empty(&package->filepatches))
         return ERROR_SUCCESS;
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `Patch` ORDER BY `Sequence`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -1419,14 +1245,11 @@ static void mark_patched_components( MSIPACKAGE *package )
 
 static UINT load_folder_persistence( MSIPACKAGE *package, MSIFOLDER *folder )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','C','r','e','a','t','e','F','o','l','d','e','r','`',' ','W','H','E','R','E',' ',
-        '`','D','i','r','e','c','t','o','r','y','_','`',' ','=','\'','%','s','\'',0};
     MSIQUERY *view;
 
     folder->persistent = FALSE;
-    if (!MSI_OpenQuery( package->db, &view, query, folder->Directory ))
+    if (!MSI_OpenQuery( package->db, &view, L"SELECT * FROM `CreateFolder` WHERE `Directory_` = '%s'",
+                        folder->Directory ))
     {
         if (!MSI_ViewExecute( view, NULL ))
         {
@@ -1446,7 +1269,7 @@ static UINT load_folder_persistence( MSIPACKAGE *package, MSIFOLDER *folder )
 static UINT load_folder( MSIRECORD *row, LPVOID param )
 {
     MSIPACKAGE *package = param;
-    static WCHAR szEmpty[] = { 0 };
+    static WCHAR szEmpty[] = {0};
     LPWSTR p, tgt_short, tgt_long, src_short, src_long;
     MSIFOLDER *folder;
 
@@ -1467,9 +1290,9 @@ static UINT load_folder( MSIRECORD *row, LPVOID param )
     src_long = folder_split_path( src_short, '|' );
 
     /* check for no-op dirs */
-    if (tgt_short && !wcscmp( szDot, tgt_short ))
+    if (tgt_short && !wcscmp( L".", tgt_short ))
         tgt_short = szEmpty;
-    if (src_short && !wcscmp( szDot, src_short ))
+    if (src_short && !wcscmp( L".", src_short ))
         src_short = szEmpty;
 
     if (!tgt_long)
@@ -1527,16 +1350,13 @@ static UINT find_folder_children( MSIRECORD *row, LPVOID param )
 
 static UINT load_all_folders( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','D','i','r','e','c','t','o','r','y','`',0};
     MSIQUERY *view;
     UINT r;
 
     if (!list_empty(&package->folders))
         return ERROR_SUCCESS;
 
-    r = MSI_DatabaseOpenViewW( package->db, query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Directory`", &view );
     if (r != ERROR_SUCCESS)
         return r;
 
@@ -1553,8 +1373,8 @@ static UINT load_all_folders( MSIPACKAGE *package )
 
 static UINT ACTION_CostInitialize(MSIPACKAGE *package)
 {
-    msi_set_property( package->db, szCostingComplete, szZero, -1 );
-    msi_set_property( package->db, szRootDrive, szCRoot, -1 );
+    msi_set_property( package->db, L"CostingComplete", L"0", -1 );
+    msi_set_property( package->db, L"ROOTDRIVE", L"C:\\", -1 );
 
     load_all_folders( package );
     msi_load_all_components( package );
@@ -1622,7 +1442,7 @@ static void get_client_counts( MSIPACKAGE *package )
     {
         if (!comp->ComponentId) continue;
 
-        if (MSIREG_OpenUserDataComponentKey( comp->ComponentId, szLocalSid, &hkey, FALSE ) &&
+        if (MSIREG_OpenUserDataComponentKey( comp->ComponentId, L"S-1-5-18", &hkey, FALSE ) &&
             MSIREG_OpenUserDataComponentKey( comp->ComponentId, NULL, &hkey, FALSE ))
         {
             comp->num_clients = 0;
@@ -1687,8 +1507,8 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
 {
     LPWSTR override;
     MSIFEATURE *feature;
-    BOOL remove = !wcscmp(property, szRemove);
-    BOOL reinstall = !wcscmp(property, szReinstall);
+    BOOL remove = !wcscmp(property, L"REMOVE");
+    BOOL reinstall = !wcscmp(property, L"REINSTALL");
 
     override = msi_dup_property( package->db, property );
     if (!override)
@@ -1704,7 +1524,7 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
         else if (remove)
             state = (feature->Installed == INSTALLSTATE_ABSENT ? INSTALLSTATE_UNKNOWN : INSTALLSTATE_ABSENT);
 
-        if (!wcsicmp( override, szAll ))
+        if (!wcsicmp( override, L"ALL" ))
         {
             feature->Action = state;
             feature->ActionRequest = state;
@@ -1741,12 +1561,6 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
 
 static BOOL process_overrides( MSIPACKAGE *package, int level )
 {
-    static const WCHAR szAddLocal[] =
-        {'A','D','D','L','O','C','A','L',0};
-    static const WCHAR szAddSource[] =
-        {'A','D','D','S','O','U','R','C','E',0};
-    static const WCHAR szAdvertise[] =
-        {'A','D','V','E','R','T','I','S','E',0};
     BOOL ret = FALSE;
 
     /* all these activation/deactivation things happen in order and things
@@ -1765,14 +1579,14 @@ static BOOL process_overrides( MSIPACKAGE *package, int level )
      * 10  FILEADDSOURCE
      * 11  FILEADDDEFAULT
      */
-    ret |= process_state_property( package, level, szAddLocal, INSTALLSTATE_LOCAL );
-    ret |= process_state_property( package, level, szRemove, INSTALLSTATE_ABSENT );
-    ret |= process_state_property( package, level, szAddSource, INSTALLSTATE_SOURCE );
-    ret |= process_state_property( package, level, szReinstall, INSTALLSTATE_UNKNOWN );
-    ret |= process_state_property( package, level, szAdvertise, INSTALLSTATE_ADVERTISED );
+    ret |= process_state_property( package, level, L"ADDLOCAL", INSTALLSTATE_LOCAL );
+    ret |= process_state_property( package, level, L"REMOVE", INSTALLSTATE_ABSENT );
+    ret |= process_state_property( package, level, L"ADDSOURCE", INSTALLSTATE_SOURCE );
+    ret |= process_state_property( package, level, L"REINSTALL", INSTALLSTATE_UNKNOWN );
+    ret |= process_state_property( package, level, L"ADVERTISE", INSTALLSTATE_ADVERTISED );
 
     if (ret)
-        msi_set_property( package->db, szPreselected, szOne, -1 );
+        msi_set_property( package->db, L"Preselected", L"1", -1 );
 
     return ret;
 }
@@ -1824,9 +1638,9 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
 
     TRACE("Checking Install Level\n");
 
-    level = msi_get_property_int(package->db, szInstallLevel, 1);
+    level = msi_get_property_int(package->db, L"INSTALLLEVEL", 1);
 
-    if (msi_get_property_int( package->db, szPreselected, 0 ))
+    if (msi_get_property_int( package->db, L"Preselected", 0 ))
     {
         LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry )
         {
@@ -1847,7 +1661,7 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
             }
         }
     }
-    else if (!msi_get_property_int( package->db, szInstalled, 0 ))
+    else if (!msi_get_property_int( package->db, L"Installed", 0 ))
     {
         LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry )
         {
@@ -2141,7 +1955,7 @@ static WCHAR *create_temp_dir( MSIDATABASE *db )
         WCHAR tmp[MAX_PATH];
         UINT len = ARRAY_SIZE( tmp );
 
-        if (msi_get_property( db, szTempFolder, tmp, &len ) ||
+        if (msi_get_property( db, L"TempFolder", tmp, &len ) ||
             GetFileAttributesW( tmp ) != FILE_ATTRIBUTE_DIRECTORY)
         {
             GetTempPathW( MAX_PATH, tmp );
@@ -2153,7 +1967,7 @@ static WCHAR *create_temp_dir( MSIDATABASE *db )
     {
         for (;;)
         {
-            if (!GetTempFileNameW( db->tempfolder, szMsi, ++id, ret ))
+            if (!GetTempFileNameW( db->tempfolder, L"msi", ++id, ret ))
             {
                 msi_free( ret );
                 return NULL;
@@ -2207,7 +2021,7 @@ WCHAR *msi_build_directory_name( DWORD count, ... )
         const WCHAR *str = va_arg( va, const WCHAR * );
         if (!str) continue;
         lstrcatW( dir, str );
-        if ( i + 1 != count && dir[0] && dir[lstrlenW( dir ) - 1] != '\\') lstrcatW( dir, szBackSlash );
+        if ( i + 1 != count && dir[0] && dir[lstrlenW( dir ) - 1] != '\\') lstrcatW( dir, L"\\" );
     }
     va_end( va );
     return dir;
@@ -2345,7 +2159,7 @@ static WCHAR *get_install_location( MSIPACKAGE *package )
 
     if (!package->ProductCode) return NULL;
     if (MSIREG_OpenInstallProps( package->ProductCode, package->Context, NULL, &hkey, FALSE )) return NULL;
-    if ((path = msi_reg_get_val_str( hkey, szInstallLocation )) && !path[0])
+    if ((path = msi_reg_get_val_str( hkey, L"InstallLocation" )) && !path[0])
     {
         msi_free( path );
         path = NULL;
@@ -2364,12 +2178,12 @@ void msi_resolve_target_folder( MSIPACKAGE *package, const WCHAR *name, BOOL loa
 
     if (!(folder = msi_get_loaded_folder( package, name ))) return;
 
-    if (!wcscmp( folder->Directory, szTargetDir )) /* special resolving for target root dir */
+    if (!wcscmp( folder->Directory, L"TARGETDIR" )) /* special resolving for target root dir */
     {
         if (!(path = get_install_location( package )) &&
-            (!load_prop || !(path = msi_dup_property( package->db, szTargetDir ))))
+            (!load_prop || !(path = msi_dup_property( package->db, L"TARGETDIR" ))))
         {
-            path = msi_dup_property( package->db, szRootDrive );
+            path = msi_dup_property( package->db, L"ROOTDRIVE" );
         }
     }
     else if (!load_prop || !(path = msi_dup_property( package->db, folder->Directory )))
@@ -2412,33 +2226,13 @@ static ULONGLONG get_volume_space_required( MSIPACKAGE *package )
 
 static UINT ACTION_CostFinalize(MSIPACKAGE *package)
 {
-    static const WCHAR query[] =
-        {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-         '`','C','o','n','d','i','t','i','o','n','`',0};
-    static const WCHAR szOutOfDiskSpace[] =
-        {'O','u','t','O','f','D','i','s','k','S','p','a','c','e',0};
-    static const WCHAR szPrimaryFolder[] =
-        {'P','R','I','M','A','R','Y','F','O','L','D','E','R',0};
-    static const WCHAR szPrimaryVolumePath[] =
-        {'P','r','i','m','a','r','y','V','o','l','u','m','e','P','a','t','h',0};
-    static const WCHAR szPrimaryVolumeSpaceAvailable[] =
-        {'P','r','i','m','a','r','y','V','o','l','u','m','e','S','p','a','c','e',
-         'A','v','a','i','l','a','b','l','e',0};
-    static const WCHAR szPrimaryVolumeSpaceRequired[] =
-        {'P','r','i','m','a','r','y','V','o','l','u','m','e','S','p','a','c','e',
-         'R','e','q','u','i','r','e','d',0};
-    static const WCHAR szPrimaryVolumeSpaceRemaining[] =
-        {'P','r','i','m','a','r','y','V','o','l','u','m','e','S','p','a','c','e',
-         'R','e','m','a','i','n','i','n','g',0};
-    static const WCHAR szOutOfNoRbDiskSpace[] =
-        {'O','u','t','O','f','N','o','R','b','D','i','s','k','S','p','a','c','e',0};
     MSICOMPONENT *comp;
     MSIQUERY *view;
     WCHAR *level, *primary_key, *primary_folder;
     UINT rc;
 
     TRACE("Building directory properties\n");
-    msi_resolve_target_folder( package, szTargetDir, TRUE );
+    msi_resolve_target_folder( package, L"TARGETDIR", TRUE );
 
     TRACE("Evaluating component conditions\n");
     LIST_FOR_EACH_ENTRY( comp, &package->components, MSICOMPONENT, entry )
@@ -2457,11 +2251,11 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
     ACTION_GetComponentInstallStates(package);
     ACTION_GetFeatureInstallStates(package);
 
-    if (!process_overrides( package, msi_get_property_int( package->db, szInstallLevel, 1 ) ))
+    if (!process_overrides( package, msi_get_property_int( package->db, L"INSTALLLEVEL", 1 ) ))
     {
         TRACE("Evaluating feature conditions\n");
 
-        rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+        rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Condition`", &view );
         if (rc == ERROR_SUCCESS)
         {
             rc = MSI_IterateRecords( view, NULL, ITERATE_CostFinalizeConditions, package );
@@ -2474,22 +2268,21 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
     TRACE("Calculating file cost\n");
     calculate_file_cost( package );
 
-    msi_set_property( package->db, szCostingComplete, szOne, -1 );
+    msi_set_property( package->db, L"CostingComplete", L"1", -1 );
     /* set default run level if not set */
-    level = msi_dup_property( package->db, szInstallLevel );
-    if (!level) msi_set_property( package->db, szInstallLevel, szOne, -1 );
+    level = msi_dup_property( package->db, L"INSTALLLEVEL" );
+    if (!level) msi_set_property( package->db, L"INSTALLLEVEL", L"1", -1 );
     msi_free(level);
 
     if ((rc = MSI_SetFeatureStates( package ))) return rc;
 
-    if ((primary_key = msi_dup_property( package->db, szPrimaryFolder )))
+    if ((primary_key = msi_dup_property( package->db, L"PRIMARYFOLDER" )))
     {
         if ((primary_folder = msi_dup_property( package->db, primary_key )))
         {
             if (((primary_folder[0] >= 'A' && primary_folder[0] <= 'Z') ||
                  (primary_folder[0] >= 'a' && primary_folder[0] <= 'z')) && primary_folder[1] == ':')
             {
-                static const WCHAR fmtW[] = {'%','l','u',0};
                 ULARGE_INTEGER free;
                 ULONGLONG required;
                 WCHAR buf[21];
@@ -2497,16 +2290,16 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
                 primary_folder[2] = 0;
                 if (GetDiskFreeSpaceExW( primary_folder, &free, NULL, NULL ))
                 {
-                    swprintf( buf, ARRAY_SIZE(buf), fmtW, free.QuadPart / 512 );
-                    msi_set_property( package->db, szPrimaryVolumeSpaceAvailable, buf, -1 );
+                    swprintf( buf, ARRAY_SIZE(buf), L"%lu", free.QuadPart / 512 );
+                    msi_set_property( package->db, L"PrimaryVolumeSpaceAvailable", buf, -1 );
                 }
                 required = get_volume_space_required( package );
-                swprintf( buf, ARRAY_SIZE(buf), fmtW, required / 512 );
-                msi_set_property( package->db, szPrimaryVolumeSpaceRequired, buf, -1 );
+                swprintf( buf, ARRAY_SIZE(buf), L"%lu", required / 512 );
+                msi_set_property( package->db, L"PrimaryVolumeSpaceRequired", buf, -1 );
 
-                swprintf( buf, ARRAY_SIZE(buf), fmtW, (free.QuadPart - required) / 512 );
-                msi_set_property( package->db, szPrimaryVolumeSpaceRemaining, buf, -1 );
-                msi_set_property( package->db, szPrimaryVolumePath, primary_folder, 2 );
+                swprintf( buf, ARRAY_SIZE(buf), L"%lu", (free.QuadPart - required) / 512 );
+                msi_set_property( package->db, L"PrimaryVolumeSpaceRemaining", buf, -1 );
+                msi_set_property( package->db, L"PrimaryVolumePath", primary_folder, 2 );
             }
             msi_free( primary_folder );
         }
@@ -2514,8 +2307,8 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
     }
 
     /* FIXME: check volume disk space */
-    msi_set_property( package->db, szOutOfDiskSpace, szZero, -1 );
-    msi_set_property( package->db, szOutOfNoRbDiskSpace, szZero, -1 );
+    msi_set_property( package->db, L"OutOfDiskSpace", L"0", -1 );
+    msi_set_property( package->db, L"OutOfNoRbDiskSpace", L"0", -1 );
 
     return ERROR_SUCCESS;
 }
@@ -2636,32 +2429,32 @@ static const WCHAR *get_root_key( MSIPACKAGE *package, INT root, HKEY *root_key
     switch (root)
     {
     case -1:
-        if (msi_get_property_int( package->db, szAllUsers, 0 ))
+        if (msi_get_property_int( package->db, L"ALLUSERS", 0 ))
         {
             *root_key = HKEY_LOCAL_MACHINE;
-            ret = szHLM;
+            ret = L"HKEY_LOCAL_MACHINE\\";
         }
         else
         {
             *root_key = HKEY_CURRENT_USER;
-            ret = szHCU;
+            ret = L"HKEY_CURRENT_USER\\";
         }
         break;
     case 0:
         *root_key = HKEY_CLASSES_ROOT;
-        ret = szHCR;
+        ret = L"HKEY_CLASSES_ROOT\\";
         break;
     case 1:
         *root_key = HKEY_CURRENT_USER;
-        ret = szHCU;
+        ret = L"HKEY_CURRENT_USER\\";
         break;
     case 2:
         *root_key = HKEY_LOCAL_MACHINE;
-        ret = szHLM;
+        ret = L"HKEY_LOCAL_MACHINE\\";
         break;
     case 3:
         *root_key = HKEY_USERS;
-        ret = szHU;
+        ret = L"HKEY_USERS\\";
         break;
     default:
         ERR("Unknown root %i\n", root);
@@ -2993,16 +2786,13 @@ static UINT ITERATE_WriteRegistryValues(MSIRECORD *row, LPVOID param)
 
 static UINT ACTION_WriteRegistryValues(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','R','e','g','i','s','t','r','y','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szWriteRegistryValues);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"WriteRegistryValues");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `Registry`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -3225,19 +3015,13 @@ static UINT ITERATE_RemoveRegistryValuesOnInstall( MSIRECORD *row, LPVOID param
 
 static UINT ACTION_RemoveRegistryValues( MSIPACKAGE *package )
 {
-    static const WCHAR registry_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','R','e','g','i','s','t','r','y','`',0};
-    static const WCHAR remove_registry_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','R','e','m','o','v','e','R','e','g','i','s','t','r','y','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveRegistryValues);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RemoveRegistryValues");
 
-    rc = MSI_DatabaseOpenViewW( package->db, registry_query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Registry`", &view );
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords( view, NULL, ITERATE_RemoveRegistryValuesOnUninstall, package );
@@ -3245,7 +3029,7 @@ static UINT ACTION_RemoveRegistryValues( MSIPACKAGE *package )
         if (rc != ERROR_SUCCESS)
             return rc;
     }
-    rc = MSI_DatabaseOpenViewW( package->db, remove_registry_query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `RemoveRegistry`", &view );
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords( view, NULL, ITERATE_RemoveRegistryValuesOnInstall, package );
@@ -3264,9 +3048,6 @@ static UINT ACTION_InstallInitialize(MSIPACKAGE *package)
 
 static UINT ACTION_InstallValidate(MSIPACKAGE *package)
 {
-    static const WCHAR query[]= {
-        'S','E','L','E','C','T',' ','*',' ', 'F','R','O','M',' ',
-        '`','R','e','g','i','s','t','r','y','`',0};
     MSICOMPONENT *comp;
     DWORD total = 0, count = 0;
     MSIQUERY *view;
@@ -3276,7 +3057,7 @@ static UINT ACTION_InstallValidate(MSIPACKAGE *package)
 
     TRACE("InstallValidate\n");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Registry`", &view );
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords( view, &count, NULL, package );
@@ -3305,24 +3086,19 @@ static UINT ACTION_InstallValidate(MSIPACKAGE *package)
 static UINT ITERATE_LaunchConditions(MSIRECORD *row, LPVOID param)
 {
     MSIPACKAGE* package = param;
-    LPCWSTR cond = NULL; 
-    LPCWSTR message = NULL;
+    const WCHAR *cond, *message;
     UINT r;
 
-    static const WCHAR title[]=
-        {'I','n','s','t','a','l','l',' ','F','a', 'i','l','e','d',0};
-
-    cond = MSI_RecordGetString(row,1);
-
-    r = MSI_EvaluateConditionW(package,cond);
+    cond = MSI_RecordGetString(row, 1);
+    r = MSI_EvaluateConditionW(package, cond);
     if (r == MSICONDITION_FALSE)
     {
         if ((package->ui_level & INSTALLUILEVEL_MASK) != INSTALLUILEVEL_NONE)
         {
-            LPWSTR deformated;
-            message = MSI_RecordGetString(row,2);
-            deformat_string(package,message,&deformated);
-            MessageBoxW(NULL,deformated,title,MB_OK);
+            WCHAR *deformated;
+            message = MSI_RecordGetString(row, 2);
+            deformat_string(package, message, &deformated);
+            MessageBoxW(NULL, deformated, L"Install Failed", MB_OK);
             msi_free(deformated);
         }
 
@@ -3334,15 +3110,12 @@ static UINT ITERATE_LaunchConditions(MSIRECORD *row, LPVOID param)
 
 static UINT ACTION_LaunchConditions(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','L','a','u','n','c','h','C','o','n','d','i','t','i','o','n','`',0};
     MSIQUERY *view;
     UINT rc;
 
     TRACE("Checking launch conditions\n");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `LaunchCondition`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -3359,18 +3132,12 @@ static LPWSTR resolve_keypath( MSIPACKAGE* package, MSICOMPONENT *cmp )
 
     if (cmp->Attributes & msidbComponentAttributesRegistryKeyPath)
     {
-        static const WCHAR query[] = {
-            'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-            '`','R','e','g','i','s','t','r','y','`',' ','W','H','E','R','E',' ',
-            '`','R','e','g','i','s','t','r','y','`',' ','=',' ' ,'\'','%','s','\'',0};
-        static const WCHAR fmt[] = {'%','0','2','i',':','\\','%','s','\\',0};
-        static const WCHAR fmt2[]= {'%','0','2','i',':','\\','%','s','\\','%','s',0};
         MSIRECORD *row;
         UINT root, len;
         LPWSTR deformated, buffer, deformated_name;
         LPCWSTR key, name;
 
-        row = MSI_QueryGetRecord(package->db, query, cmp->KeyPath);
+        row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `Registry` WHERE `Registry` = '%s'", cmp->KeyPath);
         if (!row)
             return NULL;
 
@@ -3387,9 +3154,9 @@ static LPWSTR resolve_keypath( MSIPACKAGE* package, MSICOMPONENT *cmp )
         buffer = msi_alloc( len *sizeof(WCHAR));
 
         if (deformated_name)
-            swprintf(buffer,len,fmt2,root,deformated,deformated_name);
+            swprintf(buffer, len, L"%02d:\\%s\\%s", root, deformated, deformated_name);
         else
-            swprintf(buffer,len,fmt,root,deformated);
+            swprintf(buffer, len, L"%02d:\\%s\\", root, deformated);
 
         msi_free(deformated);
         msi_free(deformated_name);
@@ -3414,11 +3181,8 @@ static LPWSTR resolve_keypath( MSIPACKAGE* package, MSICOMPONENT *cmp )
 
 static HKEY open_shared_dlls_key( MSICOMPONENT *comp, BOOL create, REGSAM access )
 {
-    static const WCHAR path[] =
-        {'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','\\',
-         'S','h','a','r','e','d','D','L','L','s',0};
-    return open_key( comp, HKEY_LOCAL_MACHINE, path, create, access );
+    return open_key( comp, HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\SharedDLLs",
+                     create, access );
 }
 
 static UINT get_shared_dlls_count( MSICOMPONENT *comp )
@@ -3514,13 +3278,12 @@ static WCHAR *build_full_keypath( MSIPACKAGE *package, MSICOMPONENT *comp )
 {
     if (comp->assembly)
     {
-        static const WCHAR prefixW[] = {'<','\\',0};
-        DWORD len = lstrlenW( prefixW ) + lstrlenW( comp->assembly->display_name );
+        DWORD len = lstrlenW( L"<\\" ) + lstrlenW( comp->assembly->display_name );
         WCHAR *keypath = msi_alloc( (len + 1) * sizeof(WCHAR) );
 
         if (keypath)
         {
-            lstrcpyW( keypath, prefixW );
+            lstrcpyW( keypath, L"<\\" );
             lstrcatW( keypath, comp->assembly->display_name );
         }
         return keypath;
@@ -3540,7 +3303,7 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package)
     msi_set_sourcedir_props(package, FALSE);
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szProcessComponents);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"ProcessComponents");
 
     squash_guid( package->ProductCode, squashed_pc );
 
@@ -3569,7 +3332,7 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package)
         if (action == INSTALLSTATE_LOCAL || action == INSTALLSTATE_SOURCE)
         {
             if (package->Context == MSIINSTALLCONTEXT_MACHINE)
-                rc = MSIREG_OpenUserDataComponentKey(comp->ComponentId, szLocalSid, &hkey, TRUE);
+                rc = MSIREG_OpenUserDataComponentKey(comp->ComponentId, L"S-1-5-18", &hkey, TRUE);
             else
                 rc = MSIREG_OpenUserDataComponentKey(comp->ComponentId, NULL, &hkey, TRUE);
 
@@ -3578,12 +3341,7 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package)
 
             if (comp->Attributes & msidbComponentAttributesPermanent)
             {
-                static const WCHAR szPermKey[] =
-                    { '0','0','0','0','0','0','0','0','0','0','0','0',
-                      '0','0','0','0','0','0','0','0','0','0','0','0',
-                      '0','0','0','0','0','0','0','0',0 };
-
-                msi_reg_set_val_str(hkey, szPermKey, comp->FullKeypath);
+                msi_reg_set_val_str(hkey, L"00000000000000000000000000000000", comp->FullKeypath);
             }
             if (action == INSTALLSTATE_LOCAL)
                 msi_reg_set_val_str( hkey, squashed_pc, comp->FullKeypath );
@@ -3596,21 +3354,14 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package)
                 WCHAR base[MAX_PATH];
                 LPWSTR sourcepath;
 
-                static const WCHAR fmt[] = {'%','0','2','d','\\',0};
-                static const WCHAR query[] = {
-                    'S','E','L','E','C','T',' ','*',' ', 'F','R','O','M',' ',
-                    '`','M','e','d','i','a','`',' ','W','H','E','R','E',' ',
-                    '`','L','a','s','t','S','e','q','u','e','n','c','e','`',' ',
-                    '>','=',' ','%','i',' ','O','R','D','E','R',' ','B','Y',' ',
-                    '`','D','i','s','k','I','d','`',0};
-
                 if (!comp->KeyPath || !(file = msi_get_loaded_file(package, comp->KeyPath)))
                     continue;
 
-                if (!(row = MSI_QueryGetRecord(package->db, query, file->Sequence)))
+                if (!(row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `Media` WHERE `LastSequence` >= %d "
+                                                             "ORDER BY `DiskId`", file->Sequence)))
                     return ERROR_FUNCTION_FAILED;
 
-                swprintf(source, ARRAY_SIZE(source), fmt, MSI_RecordGetInteger(row, 1));
+                swprintf(source, ARRAY_SIZE(source), L"%02d\\", MSI_RecordGetInteger(row, 1));
                 ptr2 = wcsrchr(source, '\\') + 1;
                 msiobj_release(&row->hdr);
 
@@ -3632,7 +3383,7 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package)
             if (comp->num_clients <= 0)
             {
                 if (package->Context == MSIINSTALLCONTEXT_MACHINE)
-                    rc = MSIREG_DeleteUserDataComponentKey( comp->ComponentId, szLocalSid );
+                    rc = MSIREG_DeleteUserDataComponentKey( comp->ComponentId, L"S-1-5-18" );
                 else
                     rc = MSIREG_DeleteUserDataComponentKey( comp->ComponentId, NULL );
 
@@ -3643,7 +3394,7 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package)
                 LONG res;
 
                 if (package->Context == MSIINSTALLCONTEXT_MACHINE)
-                    rc = MSIREG_OpenUserDataComponentKey( comp->ComponentId, szLocalSid, &hkey, FALSE );
+                    rc = MSIREG_OpenUserDataComponentKey( comp->ComponentId, L"S-1-5-18", &hkey, FALSE );
                 else
                     rc = MSIREG_OpenUserDataComponentKey( comp->ComponentId, NULL, &hkey, FALSE );
 
@@ -3682,8 +3433,7 @@ static BOOL CALLBACK Typelib_EnumResNameProc( HMODULE hModule, LPCWSTR lpszType,
 {
     TLIBATTR *attr;
     typelib_struct *tl_struct = (typelib_struct*) lParam;
-    static const WCHAR fmt[] = {'%','s','\\','%','i',0};
-    int sz; 
+    int sz;
     HRESULT res;
 
     if (!IS_INTRESOURCE(lpszName))
@@ -3699,7 +3449,7 @@ static BOOL CALLBACK Typelib_EnumResNameProc( HMODULE hModule, LPCWSTR lpszType,
     else
     {
         tl_struct->path = msi_alloc(sz * sizeof(WCHAR));
-        swprintf(tl_struct->path,sz,fmt,tl_struct->source, lpszName);
+        swprintf(tl_struct->path, sz, L"%s\\%d", tl_struct->source, lpszName);
     }
 
     TRACE("trying %s\n", debugstr_w(tl_struct->path));
@@ -3785,7 +3535,7 @@ static UINT ITERATE_RegisterTypeLibraries(MSIRECORD *row, LPVOID param)
         tl_struct.source = strdupW( file->TargetPath );
         tl_struct.path = NULL;
 
-        EnumResourceNamesW(module, szTYPELIB, Typelib_EnumResNameProc,
+        EnumResourceNamesW(module, L"TYPELIB", Typelib_EnumResNameProc,
                         (LONG_PTR)&tl_struct);
 
         if (tl_struct.path)
@@ -3828,16 +3578,13 @@ static UINT ITERATE_RegisterTypeLibraries(MSIRECORD *row, LPVOID param)
 
 static UINT ACTION_RegisterTypeLibraries(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','T','y','p','e','L','i','b','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterTypeLibraries);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RegisterTypeLibraries");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `TypeLib`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -3892,16 +3639,13 @@ static UINT ITERATE_UnregisterTypeLibraries( MSIRECORD *row, LPVOID param )
 
 static UINT ACTION_UnregisterTypeLibraries( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','T','y','p','e','L','i','b','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szUnregisterTypeLibraries);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"UnregisterTypeLibraries");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `TypeLib`", &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -3912,7 +3656,6 @@ static UINT ACTION_UnregisterTypeLibraries( MSIPACKAGE *package )
 
 static WCHAR *get_link_file( MSIPACKAGE *package, MSIRECORD *row )
 {
-    static const WCHAR szlnk[] = {'.','l','n','k',0};
     LPCWSTR directory, extension, link_folder;
     LPWSTR link_file, filename;
 
@@ -3930,11 +3673,11 @@ static WCHAR *get_link_file( MSIPACKAGE *package, MSIRECORD *row )
     msi_reduce_to_long_filename( filename );
 
     extension = wcsrchr( filename, '.' );
-    if (!extension || wcsicmp( extension, szlnk ))
+    if (!extension || wcsicmp( extension, L".lnk" ))
     {
         int len = lstrlenW( filename );
-        filename = msi_realloc( filename, len * sizeof(WCHAR) + sizeof(szlnk) );
-        memcpy( filename + len, szlnk, sizeof(szlnk) );
+        filename = msi_realloc( filename, len * sizeof(WCHAR) + sizeof(L".lnk") );
+        memcpy( filename + len, L".lnk", sizeof(L".lnk") );
     }
     link_file = msi_build_directory_name( 2, link_folder, filename );
     msi_free( filename );
@@ -3944,19 +3687,17 @@ static WCHAR *get_link_file( MSIPACKAGE *package, MSIRECORD *row )
 
 WCHAR *msi_build_icon_path( MSIPACKAGE *package, const WCHAR *icon_name )
 {
-    static const WCHAR szMicrosoft[] = {'M','i','c','r','o','s','o','f','t','\\',0};
-    static const WCHAR szInstaller[] = {'I','n','s','t','a','l','l','e','r','\\',0};
     WCHAR *folder, *dest, *path;
 
     if (package->Context == MSIINSTALLCONTEXT_MACHINE)
-        folder = msi_dup_property( package->db, szWindowsFolder );
+        folder = msi_dup_property( package->db, L"WindowsFolder" );
     else
     {
-        WCHAR *appdata = msi_dup_property( package->db, szAppDataFolder );
-        folder = msi_build_directory_name( 2, appdata, szMicrosoft );
+        WCHAR *appdata = msi_dup_property( package->db, L"AppDataFolder" );
+        folder = msi_build_directory_name( 2, appdata, L"Microsoft\\" );
         msi_free( appdata );
     }
-    dest = msi_build_directory_name( 3, folder, szInstaller, package->ProductCode );
+    dest = msi_build_directory_name( 3, folder, L"Installer\\", package->ProductCode );
     msi_create_full_path( package, dest );
     path = msi_build_directory_name( 2, dest, icon_name );
     msi_free( folder );
@@ -4082,17 +3823,14 @@ err:
 
 static UINT ACTION_CreateShortcuts(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','S','h','o','r','t','c','u','t','`',0};
     MSIQUERY *view;
     HRESULT res;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szCreateShortcuts);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"CreateShortcuts");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `Shortcut`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -4135,16 +3873,13 @@ static UINT ITERATE_RemoveShortcuts( MSIRECORD *row, LPVOID param )
 
 static UINT ACTION_RemoveShortcuts( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','S','h','o','r','t','c','u','t','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveShortcuts);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RemoveShortcuts");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Shortcut`", &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -4204,13 +3939,10 @@ static UINT ITERATE_PublishIcon(MSIRECORD *row, LPVOID param)
 
 static UINT msi_publish_icons(MSIPACKAGE *package)
 {
-    static const WCHAR query[]= {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','I','c','o','n','`',0};
     MSIQUERY *view;
     UINT r;
 
-    r = MSI_DatabaseOpenViewW(package->db, query, &view);
+    r = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `Icon`", &view);
     if (r == ERROR_SUCCESS)
     {
         r = MSI_IterateRecords(view, NULL, ITERATE_PublishIcon, package);
@@ -4229,7 +3961,7 @@ static UINT msi_publish_sourcelist(MSIPACKAGE *package, HKEY hkey)
     MSIMEDIADISK *disk;
     MSISOURCELISTINFO *info;
 
-    r = RegCreateKeyW(hkey, szSourceList, &source);
+    r = RegCreateKeyW(hkey, L"SourceList", &source);
     if (r != ERROR_SUCCESS)
         return r;
 
@@ -4244,13 +3976,13 @@ static UINT msi_publish_sourcelist(MSIPACKAGE *package, HKEY hkey)
 
     r = MsiSourceListSetInfoW(package->ProductCode, NULL,
                               package->Context, MSICODE_PRODUCT,
-                              INSTALLPROPERTY_MEDIAPACKAGEPATHW, szEmpty);
+                              INSTALLPROPERTY_MEDIAPACKAGEPATHW, L"");
     if (r != ERROR_SUCCESS)
         return r;
 
     r = MsiSourceListSetInfoW(package->ProductCode, NULL,
                               package->Context, MSICODE_PRODUCT,
-                              INSTALLPROPERTY_DISKPROMPTW, szEmpty);
+                              INSTALLPROPERTY_DISKPROMPTW, L"");
     if (r != ERROR_SUCCESS)
         return r;
 
@@ -4277,15 +4009,6 @@ static UINT msi_publish_sourcelist(MSIPACKAGE *package, HKEY hkey)
 
 static UINT msi_publish_product_properties(MSIPACKAGE *package, HKEY hkey)
 {
-    static const WCHAR szARPProductIcon[] =
-        {'A','R','P','P','R','O','D','U','C','T','I','C','O','N',0};
-    static const WCHAR szAssignment[] =
-        {'A','s','s','i','g','n','m','e','n','t',0};
-    static const WCHAR szAdvertiseFlags[] =
-        {'A','d','v','e','r','t','i','s','e','F','l','a','g','s',0};
-    static const WCHAR szClients[] =
-        {'C','l','i','e','n','t','s',0};
-    static const WCHAR szColon[] = {':',0};
     WCHAR *buffer, *ptr, *guids, packcode[SQUASHED_GUID_SIZE];
     DWORD langid;
 
@@ -4293,13 +4016,13 @@ static UINT msi_publish_product_properties(MSIPACKAGE *package, HKEY hkey)
     msi_reg_set_val_str(hkey, INSTALLPROPERTY_PRODUCTNAMEW, buffer);
     msi_free(buffer);
 
-    langid = msi_get_property_int(package->db, szProductLanguage, 0);
+    langid = msi_get_property_int(package->db, L"ProductLanguage", 0);
     msi_reg_set_val_dword(hkey, INSTALLPROPERTY_LANGUAGEW, langid);
 
     /* FIXME */
     msi_reg_set_val_dword(hkey, INSTALLPROPERTY_AUTHORIZED_LUA_APPW, 0);
 
-    buffer = msi_dup_property(package->db, szARPProductIcon);
+    buffer = msi_dup_property(package->db, L"ARPPRODUCTICON");
     if (buffer)
     {
         LPWSTR path = msi_build_icon_path(package, buffer);
@@ -4308,7 +4031,7 @@ static UINT msi_publish_product_properties(MSIPACKAGE *package, HKEY hkey)
         msi_free(buffer);
     }
 
-    buffer = msi_dup_property(package->db, szProductVersion);
+    buffer = msi_dup_property(package->db, L"ProductVersion");
     if (buffer)
     {
         DWORD verdword = msi_version_str_to_dword(buffer);
@@ -4316,10 +4039,10 @@ static UINT msi_publish_product_properties(MSIPACKAGE *package, HKEY hkey)
         msi_free(buffer);
     }
 
-    msi_reg_set_val_dword(hkey, szAssignment, 0);
-    msi_reg_set_val_dword(hkey, szAdvertiseFlags, 0x184);
+    msi_reg_set_val_dword(hkey, L"Assignment", 0);
+    msi_reg_set_val_dword(hkey, L"AdvertiseFlags", 0x184);
     msi_reg_set_val_dword(hkey, INSTALLPROPERTY_INSTANCETYPEW, 0);
-    msi_reg_set_val_str(hkey, szClients, szColon);
+    msi_reg_set_val_str(hkey, L"Clients", L":");
 
     if (!(guids = msi_get_package_code(package->db))) return ERROR_OUTOFMEMORY;
     if ((ptr = wcschr(guids, ';'))) *ptr = 0;
@@ -4336,7 +4059,7 @@ static UINT msi_publish_upgrade_code(MSIPACKAGE *package)
     HKEY hkey;
     WCHAR *upgrade, squashed_pc[SQUASHED_GUID_SIZE];
 
-    upgrade = msi_dup_property(package->db, szUpgradeCode);
+    upgrade = msi_dup_property(package->db, L"UpgradeCode");
     if (!upgrade)
         return ERROR_SUCCESS;
 
@@ -4388,7 +4111,6 @@ static BOOL msi_check_unpublish(MSIPACKAGE *package)
 
 static UINT msi_publish_patches( MSIPACKAGE *package )
 {
-    static const WCHAR szAllPatches[] = {'A','l','l','P','a','t','c','h','e','s',0};
     WCHAR patch_squashed[GUID_SIZE];
     HKEY patches_key = NULL, product_patches_key = NULL, product_key;
     LONG res;
@@ -4401,7 +4123,7 @@ static UINT msi_publish_patches( MSIPACKAGE *package )
     if (r != ERROR_SUCCESS)
         return ERROR_FUNCTION_FAILED;
 
-    res = RegCreateKeyExW( product_key, szPatches, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &patches_key, NULL );
+    res = RegCreateKeyExW( product_key, L"Patches", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &patches_key, NULL );
     if (res != ERROR_SUCCESS)
     {
         r = ERROR_FUNCTION_FAILED;
@@ -4439,7 +4161,7 @@ static UINT msi_publish_patches( MSIPACKAGE *package )
         if (r != ERROR_SUCCESS)
             goto done;
 
-        res = RegSetValueExW( patch_key, szLocalPackage, 0, REG_SZ, (const BYTE *)patch->localfile,
+        res = RegSetValueExW( patch_key, L"LocalPackage", 0, REG_SZ, (const BYTE *)patch->localfile,
                               (lstrlenW( patch->localfile ) + 1) * sizeof(WCHAR) );
         RegCloseKey( patch_key );
         if (res != ERROR_SUCCESS)
@@ -4455,7 +4177,7 @@ static UINT msi_publish_patches( MSIPACKAGE *package )
         if (res != ERROR_SUCCESS)
             goto done;
 
-        res = RegSetValueExW( patch_key, szState, 0, REG_DWORD, (const BYTE *)&patch->state,
+        res = RegSetValueExW( patch_key, L"State", 0, REG_DWORD, (const BYTE *)&patch->state,
                               sizeof(patch->state) );
         if (res != ERROR_SUCCESS)
         {
@@ -4463,7 +4185,7 @@ static UINT msi_publish_patches( MSIPACKAGE *package )
             goto done;
         }
 
-        res = RegSetValueExW( patch_key, szUninstallable, 0, REG_DWORD, (const BYTE *)&patch->uninstallable,
+        res = RegSetValueExW( patch_key, L"Uninstallable", 0, REG_DWORD, (const BYTE *)&patch->uninstallable,
                               sizeof(patch->uninstallable) );
         RegCloseKey( patch_key );
         if (res != ERROR_SUCCESS)
@@ -4471,12 +4193,12 @@ static UINT msi_publish_patches( MSIPACKAGE *package )
     }
 
     all_patches[len] = 0;
-    res = RegSetValueExW( patches_key, szPatches, 0, REG_MULTI_SZ,
+    res = RegSetValueExW( patches_key, L"Patches", 0, REG_MULTI_SZ,
                           (const BYTE *)all_patches, (len + 1) * sizeof(WCHAR) );
     if (res != ERROR_SUCCESS)
         goto done;
 
-    res = RegSetValueExW( product_patches_key, szAllPatches, 0, REG_MULTI_SZ,
+    res = RegSetValueExW( product_patches_key, L"AllPatches", 0, REG_MULTI_SZ,
                           (const BYTE *)all_patches, (len + 1) * sizeof(WCHAR) );
     if (res != ERROR_SUCCESS)
         r = ERROR_FUNCTION_FAILED;
@@ -4497,7 +4219,7 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package)
     BOOL republish = FALSE;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szPublishProduct);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"PublishProduct");
 
     if (!list_empty(&package->patches))
     {
@@ -4598,7 +4320,7 @@ static WCHAR *get_ini_file_name( MSIPACKAGE *package, MSIRECORD *row )
         if (!folder) folder = msi_dup_property( package->db, dirprop );
     }
     else
-        folder = msi_dup_property( package->db, szWindowsFolder );
+        folder = msi_dup_property( package->db, L"WindowsFolder" );
 
     if (!folder)
     {
@@ -4690,16 +4412,13 @@ static UINT ITERATE_WriteIniValues(MSIRECORD *row, LPVOID param)
 
 static UINT ACTION_WriteIniValues(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','I','n','i','F','i','l','e','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szWriteIniValues);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"WriteIniValues");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `IniFile`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -4833,19 +4552,13 @@ static UINT ITERATE_RemoveIniValuesOnInstall( MSIRECORD *row, LPVOID param )
 
 static UINT ACTION_RemoveIniValues( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','I','n','i','F','i','l','e','`',0};
-    static const WCHAR remove_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','R','e','m','o','v','e','I','n','i','F','i','l','e','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveIniValues);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RemoveIniValues");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `IniFile`", &view );
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords( view, NULL, ITERATE_RemoveIniValuesOnUninstall, package );
@@ -4853,7 +4566,7 @@ static UINT ACTION_RemoveIniValues( MSIPACKAGE *package )
         if (rc != ERROR_SUCCESS)
             return rc;
     }
-    rc = MSI_DatabaseOpenViewW( package->db, remove_query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `RemoveIniFile`", &view );
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords( view, NULL, ITERATE_RemoveIniValuesOnInstall, package );
@@ -4866,10 +4579,8 @@ static UINT ACTION_RemoveIniValues( MSIPACKAGE *package )
 
 static void register_dll( const WCHAR *dll, BOOL unregister )
 {
-    static const WCHAR regW[] =
-        {'r','e','g','s','v','r','3','2','.','e','x','e',' ','\"','%','s','\"',0};
-    static const WCHAR unregW[] =
-        {'r','e','g','s','v','r','3','2','.','e','x','e',' ','/','u',' ','\"','%','s','\"',0};
+    static const WCHAR regW[] = L"regsvr32.exe \"%s\"";
+    static const WCHAR unregW[] = L"regsvr32.exe /u \"%s\"";
     PROCESS_INFORMATION pi;
     STARTUPINFOW si;
     WCHAR *cmd;
@@ -4924,16 +4635,13 @@ static UINT ITERATE_SelfRegModules(MSIRECORD *row, LPVOID param)
 
 static UINT ACTION_SelfRegModules(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','S','e','l','f','R','e','g','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szSelfRegModules);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"SelfRegModules");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `SelfReg`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -4977,16 +4685,13 @@ static UINT ITERATE_SelfUnregModules( MSIRECORD *row, LPVOID param )
 
 static UINT ACTION_SelfUnregModules( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','S','e','l','f','R','e','g','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szSelfUnregModules);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"SelfUnregModules");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `SelfReg`", &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -5002,7 +4707,7 @@ static UINT ACTION_PublishFeatures(MSIPACKAGE *package)
     HKEY hkey = NULL, userdata = NULL;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szPublishFeatures);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"PublishFeatures");
 
     if (!msi_check_publish(package))
         return ERROR_SUCCESS;
@@ -5064,9 +4769,8 @@ static UINT ACTION_PublishFeatures(MSIPACKAGE *package)
 
         if (feature->Feature_Parent)
         {
-            static const WCHAR sep[] = {'\2',0};
-            lstrcatW(data,sep);
-            lstrcatW(data,feature->Feature_Parent);
+            lstrcatW(data, L"\2");
+            lstrcatW(data, feature->Feature_Parent);
         }
 
         msi_reg_set_val_str( userdata, feature->Feature, data );
@@ -5078,8 +4782,8 @@ static UINT ACTION_PublishFeatures(MSIPACKAGE *package)
         if (!absent)
         {
             size += sizeof(WCHAR);
-            RegSetValueExW(hkey,feature->Feature,0,REG_SZ,
-                           (const BYTE*)(feature->Feature_Parent ? feature->Feature_Parent : szEmpty),size);
+            RegSetValueExW(hkey, feature->Feature, 0 ,REG_SZ,
+                           (const BYTE*)(feature->Feature_Parent ? feature->Feature_Parent : L""), size);
         }
         else
         {
@@ -5145,7 +4849,7 @@ static UINT ACTION_UnpublishFeatures(MSIPACKAGE *package)
     MSIFEATURE *feature;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szUnpublishFeatures);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"UnpublishFeatures");
 
     if (!msi_check_unpublish(package))
         return ERROR_SUCCESS;
@@ -5160,91 +4864,21 @@ static UINT ACTION_UnpublishFeatures(MSIPACKAGE *package)
 
 static UINT msi_publish_install_properties(MSIPACKAGE *package, HKEY hkey)
 {
-    static const WCHAR date_fmt[] =
-        {'%','i','%','0','2','i','%','0','2','i',0};
-    static const WCHAR szEstimatedSize[] =
-        {'E','s','t','i','m','a','t','e','d','S','i','z','e',0};
-    static const WCHAR szDisplayVersion[] =
-        {'D','i','s','p','l','a','y','V','e','r','s','i','o','n',0};
-    static const WCHAR szInstallSource[] =
-        {'I','n','s','t','a','l','l','S','o','u','r','c','e',0};
-    static const WCHAR szARPAUTHORIZEDCDFPREFIX[] =
-        {'A','R','P','A','U','T','H','O','R','I','Z','E','D','C','D','F','P','R','E','F','I','X',0};
-    static const WCHAR szAuthorizedCDFPrefix[] =
-        {'A','u','t','h','o','r','i','z','e','d','C','D','F','P','r','e','f','i','x',0};
-    static const WCHAR szARPCONTACT[] =
-        {'A','R','P','C','O','N','T','A','C','T',0};
-    static const WCHAR szContact[] =
-        {'C','o','n','t','a','c','t',0};
-    static const WCHAR szARPCOMMENTS[] =
-        {'A','R','P','C','O','M','M','E','N','T','S',0};
-    static const WCHAR szComments[] =
-        {'C','o','m','m','e','n','t','s',0};
-    static const WCHAR szProductName[] =
-        {'P','r','o','d','u','c','t','N','a','m','e',0};
-    static const WCHAR szDisplayName[] =
-        {'D','i','s','p','l','a','y','N','a','m','e',0};
-    static const WCHAR szARPHELPLINK[] =
-        {'A','R','P','H','E','L','P','L','I','N','K',0};
-    static const WCHAR szHelpLink[] =
-        {'H','e','l','p','L','i','n','k',0};
-    static const WCHAR szARPHELPTELEPHONE[] =
-        {'A','R','P','H','E','L','P','T','E','L','E','P','H','O','N','E',0};
-    static const WCHAR szHelpTelephone[] =
-        {'H','e','l','p','T','e','l','e','p','h','o','n','e',0};
-    static const WCHAR szARPINSTALLLOCATION[] =
-        {'A','R','P','I','N','S','T','A','L','L','L','O','C','A','T','I','O','N',0};
-    static const WCHAR szManufacturer[] =
-        {'M','a','n','u','f','a','c','t','u','r','e','r',0};
-    static const WCHAR szPublisher[] =
-        {'P','u','b','l','i','s','h','e','r',0};
-    static const WCHAR szARPREADME[] =
-        {'A','R','P','R','E','A','D','M','E',0};
-    static const WCHAR szReadme[] =
-        {'R','e','a','d','M','e',0};
-    static const WCHAR szARPSIZE[] =
-        {'A','R','P','S','I','Z','E',0};
-    static const WCHAR szSize[] =
-        {'S','i','z','e',0};
-    static const WCHAR szARPURLINFOABOUT[] =
-        {'A','R','P','U','R','L','I','N','F','O','A','B','O','U','T',0};
-    static const WCHAR szURLInfoAbout[] =
-        {'U','R','L','I','n','f','o','A','b','o','u','t',0};
-    static const WCHAR szARPURLUPDATEINFO[] =
-        {'A','R','P','U','R','L','U','P','D','A','T','E','I','N','F','O',0};
-    static const WCHAR szURLUpdateInfo[] =
-        {'U','R','L','U','p','d','a','t','e','I','n','f','o',0};
-    static const WCHAR szARPSYSTEMCOMPONENT[] =
-        {'A','R','P','S','Y','S','T','E','M','C','O','M','P','O','N','E','N','T',0};
-    static const WCHAR szSystemComponent[] =
-        {'S','y','s','t','e','m','C','o','m','p','o','n','e','n','t',0};
-    static const WCHAR szARPNOMODIFY[] =
-        {'A','R','P','N','O','M','O','D','I','F','Y',0};
-    static const WCHAR szNoModify[] =
-        {'N','o','M','o','d','i','f','y',0};
-    static const WCHAR szARPNOREMOVE[] =
-        {'A','R','P','N','O','R','E','M','O','V','E',0};
-    static const WCHAR szNoRemove[] =
-        {'N','o','R','e','m','o','v','e',0};
-    static const WCHAR szARPNOREPAIR[] =
-        {'A','R','P','N','O','R','E','P','A','I','R',0};
-    static const WCHAR szNoRepair[] =
-        {'N','o','R','e','p','a','i','r',0};
-
-    static const WCHAR *propval[] = {
-        szARPAUTHORIZEDCDFPREFIX, szAuthorizedCDFPrefix,
-        szARPCONTACT,             szContact,
-        szARPCOMMENTS,            szComments,
-        szProductName,            szDisplayName,
-        szARPHELPLINK,            szHelpLink,
-        szARPHELPTELEPHONE,       szHelpTelephone,
-        szARPINSTALLLOCATION,     szInstallLocation,
-        szSourceDir,              szInstallSource,
-        szManufacturer,           szPublisher,
-        szARPREADME,              szReadme,
-        szARPSIZE,                szSize,
-        szARPURLINFOABOUT,        szURLInfoAbout,
-        szARPURLUPDATEINFO,       szURLUpdateInfo,
+    static const WCHAR *propval[] =
+    {
+        L"ARPAUTHORIZEDCDFPREFIX", L"AuthorizedCDFPrefix",
+        L"ARPCONTACT",             L"Contact",
+        L"ARPCOMMENTS",            L"Comments",
+        L"ProductName",            L"DisplayName",
+        L"ARPHELPLINK",            L"HelpLink",
+        L"ARPHELPTELEPHONE",       L"HelpTelephone",
+        L"ARPINSTALLLOCATION",     L"InstallLocation",
+        L"SourceDir",              L"InstallSource",
+        L"Manufacturer",           L"Publisher",
+        L"ARPREADME",              L"ReadMe",
+        L"ARPSIZE",                L"Size",
+        L"ARPURLINFOABOUT",        L"URLInfoAbout",
+        L"ARPURLUPDATEINFO",       L"URLUpdateInfo",
         NULL
     };
     const WCHAR **p = propval;
@@ -5262,55 +4896,47 @@ static UINT msi_publish_install_properties(MSIPACKAGE *package, HKEY hkey)
         msi_free(val);
     }
 
-    msi_reg_set_val_dword(hkey, szWindowsInstaller, 1);
-    if (msi_get_property_int( package->db, szARPSYSTEMCOMPONENT, 0 ))
+    msi_reg_set_val_dword(hkey, L"WindowsInstaller", 1);
+    if (msi_get_property_int( package->db, L"ARPSYSTEMCOMPONENT", 0 ))
     {
-        msi_reg_set_val_dword( hkey, szSystemComponent, 1 );
+        msi_reg_set_val_dword( hkey, L"SystemComponent", 1 );
     }
 
-    if (msi_get_property_int( package->db, szARPNOREMOVE, 0 ))
-        msi_reg_set_val_dword( hkey, szNoRemove, 1 );
+    if (msi_get_property_int( package->db, L"ARPNOREMOVE", 0 ))
+        msi_reg_set_val_dword( hkey, L"NoRemove", 1 );
     else
     {
-        static const WCHAR fmt_install[] =
-            {'M','s','i','E','x','e','c','.','e','x','e',' ',
-             '/','I','[','P','r','o','d','u','c','t','C','o','d','e',']',0};
-        static const WCHAR fmt_uninstall[] =
-            {'M','s','i','E','x','e','c','.','e','x','e',' ',
-             '/','X','[','P','r','o','d','u','c','t','C','o','d','e',']',0};
-        static const WCHAR szModifyPath[] =
-            {'M','o','d','i','f','y','P','a','t','h',0};
-        static const WCHAR szUninstallString[] =
-            {'U','n','i','n','s','t','a','l','l','S','t','r','i','n','g',0};
+        static const WCHAR fmt_install[] = L"MsiExec.exe /I[ProductCode]";
+        static const WCHAR fmt_uninstall[] = L"MsiExec.exe /X[ProductCode]";
         const WCHAR *fmt = fmt_install;
 
-        if (msi_get_property_int( package->db, szARPNOREPAIR, 0 ))
-            msi_reg_set_val_dword( hkey, szNoRepair, 1 );
+        if (msi_get_property_int( package->db, L"ARPNOREPAIR", 0 ))
+            msi_reg_set_val_dword( hkey, L"NoRepair", 1 );
 
-        if (msi_get_property_int( package->db, szARPNOMODIFY, 0 ))
+        if (msi_get_property_int( package->db, L"ARPNOMODIFY", 0 ))
         {
-            msi_reg_set_val_dword( hkey, szNoModify, 1 );
+            msi_reg_set_val_dword( hkey, L"NoModify", 1 );
             fmt = fmt_uninstall;
         }
 
         size = deformat_string(package, fmt, &buffer) * sizeof(WCHAR);
-        RegSetValueExW(hkey, szModifyPath, 0, REG_EXPAND_SZ, (LPBYTE)buffer, size);
-        RegSetValueExW(hkey, szUninstallString, 0, REG_EXPAND_SZ, (LPBYTE)buffer, size);
+        RegSetValueExW(hkey, L"ModifyPath", 0, REG_EXPAND_SZ, (LPBYTE)buffer, size);
+        RegSetValueExW(hkey, L"UninstallString", 0, REG_EXPAND_SZ, (LPBYTE)buffer, size);
         msi_free(buffer);
     }
 
     /* FIXME: Write real Estimated Size when we have it */
-    msi_reg_set_val_dword(hkey, szEstimatedSize, 0);
+    msi_reg_set_val_dword(hkey, L"EstimatedSize", 0);
 
     GetLocalTime(&systime);
-    swprintf(date, ARRAY_SIZE(date), date_fmt, systime.wYear, systime.wMonth, systime.wDay);
+    swprintf(date, ARRAY_SIZE(date), L"%d%02d%02d", systime.wYear, systime.wMonth, systime.wDay);
     msi_reg_set_val_str(hkey, INSTALLPROPERTY_INSTALLDATEW, date);
 
-    langid = msi_get_property_int(package->db, szProductLanguage, 0);
+    langid = msi_get_property_int(package->db, L"ProductLanguage", 0);
     msi_reg_set_val_dword(hkey, INSTALLPROPERTY_LANGUAGEW, langid);
 
-    buffer = msi_dup_property(package->db, szProductVersion);
-    msi_reg_set_val_str(hkey, szDisplayVersion, buffer);
+    buffer = msi_dup_property(package->db, L"ProductVersion");
+    msi_reg_set_val_str(hkey, L"DisplayVersion", buffer);
     if (buffer)
     {
         DWORD verdword = msi_version_str_to_dword(buffer);
@@ -5332,10 +4958,10 @@ static UINT ACTION_RegisterProduct(MSIPACKAGE *package)
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterProduct);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RegisterProduct");
 
     /* FIXME: also need to publish if the product is in advertise mode */
-    if (!msi_get_property_int( package->db, szProductToBeRegistered, 0 )
+    if (!msi_get_property_int( package->db, L"ProductToBeRegistered", 0 )
             && !msi_check_publish(package))
         return ERROR_SUCCESS;
 
@@ -5355,7 +4981,7 @@ static UINT ACTION_RegisterProduct(MSIPACKAGE *package)
     if (rc != ERROR_SUCCESS)
         goto done;
 
-    upgrade_code = msi_dup_property(package->db, szUpgradeCode);
+    upgrade_code = msi_dup_property(package->db, L"UpgradeCode");
     if (upgrade_code)
     {
         rc = MSIREG_OpenUpgradeCodesKey( upgrade_code, &upgrade_key, TRUE );
@@ -5408,12 +5034,10 @@ static UINT ITERATE_UnpublishIcon( MSIRECORD *row, LPVOID param )
 
 static UINT msi_unpublish_icons( MSIPACKAGE *package )
 {
-    static const WCHAR query[]= {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','I','c','o','n','`',0};
     MSIQUERY *view;
     UINT r;
 
-    r = MSI_DatabaseOpenViewW( package->db, query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Icon`", &view );
     if (r == ERROR_SUCCESS)
     {
         r = MSI_IterateRecords( view, NULL, ITERATE_UnpublishIcon, package );
@@ -5432,7 +5056,7 @@ static void remove_product_upgrade_code( MSIPACKAGE *package )
     DWORD count;
 
     squash_guid( package->ProductCode, product );
-    if (!(code = msi_dup_property( package->db, szUpgradeCode )))
+    if (!(code = msi_dup_property( package->db, L"UpgradeCode" )))
     {
         WARN( "upgrade code not found\n" );
         return;
@@ -5530,44 +5154,24 @@ static UINT ACTION_InstallFinalize(MSIPACKAGE *package)
 
 UINT ACTION_ForceReboot(MSIPACKAGE *package)
 {
-    static const WCHAR RunOnce[] = {
-    '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','\\',
-    'R','u','n','O','n','c','e',0};
-    static const WCHAR InstallRunOnce[] = {
-    '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','\\',
-    'I','n','s','t','a','l','l','e','r','\\',
-    'R','u','n','O','n','c','e','E','n','t','r','i','e','s',0};
-
-    static const WCHAR msiexec_fmt[] = {
-    '%','s',
-    '\\','M','s','i','E','x','e','c','.','e','x','e',' ','/','@',' ',
-    '\"','%','s','\"',0};
-    static const WCHAR install_fmt[] = {
-    '/','I',' ','\"','%','s','\"',' ',
-    'A','F','T','E','R','R','E','B','O','O','T','=','1',' ',
-    'R','U','N','O','N','C','E','E','N','T','R','Y','=','\"','%','s','\"',0};
     WCHAR buffer[256], sysdir[MAX_PATH], squashed_pc[SQUASHED_GUID_SIZE];
     HKEY hkey;
 
     squash_guid( package->ProductCode, squashed_pc );
 
     GetSystemDirectoryW(sysdir, ARRAY_SIZE(sysdir));
-    RegCreateKeyW(HKEY_LOCAL_MACHINE,RunOnce,&hkey);
-    swprintf(buffer, ARRAY_SIZE(buffer), msiexec_fmt, sysdir, squashed_pc);
+    RegCreateKeyW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce", &hkey);
+    swprintf(buffer, ARRAY_SIZE(buffer), L"%s\\MsiExec.exe /@ \"%s\"", sysdir, squashed_pc);
 
     msi_reg_set_val_str( hkey, squashed_pc, buffer );
     RegCloseKey(hkey);
 
     TRACE("Reboot command %s\n",debugstr_w(buffer));
 
-    RegCreateKeyW(HKEY_LOCAL_MACHINE,InstallRunOnce,&hkey);
-    swprintf( buffer, ARRAY_SIZE(buffer), install_fmt, package->ProductCode, squashed_pc );
+    RegCreateKeyW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\RunOnceEntries",
+                  &hkey);
+    swprintf( buffer, ARRAY_SIZE(buffer), L"/I \"%s\" AFTERREBOOT=1 RUNONCEENTRY=\"%s\"", package->ProductCode,
+              squashed_pc );
 
     msi_reg_set_val_str( hkey, squashed_pc, buffer );
     RegCloseKey(hkey);
@@ -5631,29 +5235,27 @@ static UINT ACTION_ResolveSource(MSIPACKAGE* package)
 
 static UINT ACTION_RegisterUser(MSIPACKAGE *package)
 {
-    HKEY hkey = 0;
-    LPWSTR buffer, productid = NULL;
-    UINT i, rc = ERROR_SUCCESS;
-    MSIRECORD *uirow;
-
-    static const WCHAR szPropKeys[][80] = 
+    static const WCHAR szPropKeys[][80] =
     {
-        {'P','r','o','d','u','c','t','I','D',0},
-        {'U','S','E','R','N','A','M','E',0},
-        {'C','O','M','P','A','N','Y','N','A','M','E',0},
+        L"ProductID",
+        L"USERNAME",
+        L"COMPANYNAME",
         {0},
     };
-
-    static const WCHAR szRegKeys[][80] = 
+    static const WCHAR szRegKeys[][80] =
     {
-        {'P','r','o','d','u','c','t','I','D',0},
-        {'R','e','g','O','w','n','e','r',0},
-        {'R','e','g','C','o','m','p','a','n','y',0},
+        L"ProductID",
+        L"RegOwner",
+        L"RegCompany",
         {0},
     };
+    HKEY hkey = 0;
+    LPWSTR buffer, productid = NULL;
+    UINT i, rc = ERROR_SUCCESS;
+    MSIRECORD *uirow;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterUser);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RegisterUser");
 
     if (msi_check_unpublish(package))
     {
@@ -5690,13 +5292,11 @@ end:
 
 static UINT iterate_properties(MSIRECORD *record, void *param)
 {
-    static const WCHAR prop_template[] =
-        {'P','r','o','p','e','r','t','y','(','S',')',':',' ','[','1',']',' ','=',' ','[','2',']',0};
     MSIRECORD *uirow;
 
     uirow = MSI_CloneRecord(record);
     if (!uirow) return ERROR_OUTOFMEMORY;
-    MSI_RecordSetStringW(uirow, 0, prop_template);
+    MSI_RecordSetStringW(uirow, 0, L"Property(S): [1] = [2]");
     MSI_ProcessMessage(param, INSTALLMESSAGE_INFO|MB_ICONHAND, uirow);
     msiobj_release(&uirow->hdr);
 
@@ -5706,8 +5306,6 @@ static UINT iterate_properties(MSIRECORD *record, void *param)
 
 static UINT ACTION_ExecuteAction(MSIPACKAGE *package)
 {
-    static const WCHAR prop_query[] =
-        {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','_','P','r','o','p','e','r','t','y','`',0};
     WCHAR *productname;
     WCHAR *action;
     WCHAR *info_template;
@@ -5753,15 +5351,15 @@ static UINT ACTION_ExecuteAction(MSIPACKAGE *package)
 
     package->LastActionResult = MSI_NULL_INTEGER;
 
-    action = msi_dup_property(package->db, szEXECUTEACTION);
-    if (!action) action = msi_strdupW(szINSTALL, lstrlenW(szINSTALL));
+    action = msi_dup_property(package->db, L"EXECUTEACTION");
+    if (!action) action = msi_strdupW(L"INSTALL", ARRAY_SIZE(L"INSTALL") - 1);
 
     /* Perform the action. Top-level actions trigger a sequence. */
-    if (!wcscmp(action, szINSTALL))
+    if (!wcscmp(action, L"INSTALL"))
     {
         /* Send ACTIONSTART/INFO and INSTALLSTART. */
-        ui_actionstart(package, szINSTALL, NULL, NULL);
-        ui_actioninfo(package, szINSTALL, TRUE, 0);
+        ui_actionstart(package, L"INSTALL", NULL, NULL);
+        ui_actioninfo(package, L"INSTALL", TRUE, 0);
         uirow = MSI_CreateRecord(2);
         if (!uirow)
         {
@@ -5779,7 +5377,7 @@ static UINT ACTION_ExecuteAction(MSIPACKAGE *package)
         rc = ACTION_ProcessExecSequence(package);
 
         /* Send return value and INSTALLEND. */
-        ui_actioninfo(package, szINSTALL, FALSE, !rc);
+        ui_actioninfo(package, L"INSTALL", FALSE, !rc);
         uirow = MSI_CreateRecord(3);
         if (!uirow)
         {
@@ -5797,7 +5395,7 @@ static UINT ACTION_ExecuteAction(MSIPACKAGE *package)
         rc = ACTION_PerformAction(package, action);
 
     /* Send all set properties. */
-    if (!MSI_OpenQuery(package->db, &view, prop_query))
+    if (!MSI_OpenQuery(package->db, &view, L"SELECT * FROM `_Property`"))
     {
         MSI_IterateRecords(view, NULL, iterate_properties, package);
         msiobj_release(&view->hdr);
@@ -5826,7 +5424,7 @@ end:
 
 static UINT ACTION_INSTALL(MSIPACKAGE *package)
 {
-    msi_set_property(package->db, szEXECUTEACTION, szINSTALL, -1);
+    msi_set_property(package->db, L"EXECUTEACTION", L"INSTALL", -1);
     if (needs_ui_sequence(package) && ui_sequence_exists(package))
     {
         package->InWhatSequence |= SEQUENCE_UI;
@@ -5838,7 +5436,6 @@ static UINT ACTION_INSTALL(MSIPACKAGE *package)
 
 WCHAR *msi_create_component_advertise_string( MSIPACKAGE *package, MSICOMPONENT *component, const WCHAR *feature )
 {
-    static const WCHAR fmt[] = {'%','s','%','s','%','c','%','s',0};
     WCHAR productid_85[21], component_85[21], *ret;
     GUID clsid;
     DWORD sz;
@@ -5861,7 +5458,7 @@ WCHAR *msi_create_component_advertise_string( MSIPACKAGE *package, MSICOMPONENT
 
     sz = 20 + lstrlenW( feature ) + 20 + 3;
     ret = msi_alloc_zero( sz * sizeof(WCHAR) );
-    if (ret) swprintf( ret, sz, fmt, productid_85, feature, component ? '>' : '<', component_85 );
+    if (ret) swprintf( ret, sz, L"%s%s%c%s", productid_85, feature, component ? '>' : '<', component_85 );
     return ret;
 }
 
@@ -5971,16 +5568,13 @@ end:
  */
 static UINT ACTION_PublishComponents(MSIPACKAGE *package)
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','P','u','b','l','i','s','h','C','o','m','p','o','n','e','n','t','`',0};
     MSIQUERY *view;
     UINT rc;
-    
+
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szPublishComponents);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"PublishComponents");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `PublishComponent`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -5991,12 +5585,6 @@ static UINT ACTION_PublishComponents(MSIPACKAGE *package)
 
 static UINT ITERATE_UnpublishComponent( MSIRECORD *rec, LPVOID param )
 {
-    static const WCHAR szInstallerComponents[] = {
-        'S','o','f','t','w','a','r','e','\\',
-        'M','i','c','r','o','s','o','f','t','\\',
-        'I','n','s','t','a','l','l','e','r','\\',
-        'C','o','m','p','o','n','e','n','t','s','\\',0};
-
     MSIPACKAGE *package = param;
     LPCWSTR compgroupid, component, feature, qualifier;
     MSICOMPONENT *comp;
@@ -6026,7 +5614,7 @@ static UINT ITERATE_UnpublishComponent( MSIRECORD *rec, LPVOID param )
     qualifier = MSI_RecordGetString( rec, 2 );
 
     squash_guid( compgroupid, squashed );
-    lstrcpyW( keypath, szInstallerComponents );
+    lstrcpyW( keypath, L"Software\\Microsoft\\Installer\\Components\\" );
     lstrcatW( keypath, squashed );
 
     res = RegDeleteKeyW( HKEY_CURRENT_USER, keypath );
@@ -6046,16 +5634,13 @@ static UINT ITERATE_UnpublishComponent( MSIRECORD *rec, LPVOID param )
 
 static UINT ACTION_UnpublishComponents( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','P','u','b','l','i','s','h','C','o','m','p','o','n','e','n','t','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szUnpublishComponents);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"UnpublishComponents");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `PublishComponent`", &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -6066,10 +5651,6 @@ static UINT ACTION_UnpublishComponents( MSIPACKAGE *package )
 
 static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
 {
-    static const WCHAR query[] =
-        {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-         '`','C','o','m','p','o','n','e','n','t','`',' ','W','H','E','R','E',' ',
-         '`','C','o','m','p','o','n','e','n','t','`',' ','=','\'','%','s','\'',0};
     MSIPACKAGE *package = param;
     MSICOMPONENT *component;
     MSIRECORD *row;
@@ -6126,7 +5707,7 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
     err_control &= ~msidbServiceInstallErrorControlVital;
 
     /* fetch the service path */
-    row = MSI_QueryGetRecord(package->db, query, comp);
+    row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `Component` WHERE `Component` = '%s'", comp);
     if (!row)
     {
         ERR("Query failed\n");
@@ -6156,7 +5737,7 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
         }
 
         lstrcpyW(image_path, file->TargetPath);
-        lstrcatW(image_path, szSpace);
+        lstrcatW(image_path, L" ");
         lstrcatW(image_path, args);
     }
     service = CreateServiceW(hscm, name, disp, GENERIC_ALL, serv_type,
@@ -6197,16 +5778,13 @@ done:
 
 static UINT ACTION_InstallServices( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'S','e','r','v','i','c','e','I','n','s','t','a','l','l',0};
     MSIQUERY *view;
     UINT rc;
-    
+
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szInstallServices);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"InstallServices");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `ServiceInstall`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -6222,10 +5800,8 @@ static LPCWSTR *msi_service_args_to_vector(LPWSTR args, DWORD *numargs)
     LPWSTR p, q;
     DWORD sep_len;
 
-    static const WCHAR separator[] = {'[','~',']',0};
-
     *numargs = 0;
-    sep_len = ARRAY_SIZE(separator) - 1;
+    sep_len = ARRAY_SIZE(L"[~]") - 1;
 
     if (!args)
         return NULL;
@@ -6240,7 +5816,7 @@ static LPCWSTR *msi_service_args_to_vector(LPWSTR args, DWORD *numargs)
         (*numargs)++;
         vector[*numargs - 1] = p;
 
-        if ((q = wcsstr(p, separator)))
+        if ((q = wcsstr(p, L"[~]")))
         {
             *q = '\0';
 
@@ -6371,16 +5947,13 @@ done:
 
 static UINT ACTION_StartServices( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'S','e','r','v','i','c','e','C','o','n','t','r','o','l',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szStartServices);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"StartServices");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `ServiceControl`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -6537,16 +6110,13 @@ done:
 
 static UINT ACTION_StopServices( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'S','e','r','v','i','c','e','C','o','n','t','r','o','l',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szStopServices);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"StopServices");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `ServiceControl`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -6623,16 +6193,13 @@ done:
 
 static UINT ACTION_DeleteServices( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'S','e','r','v','i','c','e','C','o','n','t','r','o','l',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szDeleteServices);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"DeleteServices");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `ServiceControl`", &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -6653,13 +6220,6 @@ static UINT ITERATE_InstallODBCDriver( MSIRECORD *rec, LPVOID param )
     DWORD len, usage;
     UINT r = ERROR_SUCCESS;
 
-    static const WCHAR driver_fmt[] = {
-        'D','r','i','v','e','r','=','%','s',0};
-    static const WCHAR setup_fmt[] = {
-        'S','e','t','u','p','=','%','s',0};
-    static const WCHAR usage_fmt[] = {
-        'F','i','l','e','U','s','a','g','e','=','1',0};
-
     component = MSI_RecordGetString( rec, 2 );
     comp = msi_get_loaded_component( package, component );
     if (!comp)
@@ -6685,10 +6245,10 @@ static UINT ITERATE_InstallODBCDriver( MSIRECORD *rec, LPVOID param )
         return ERROR_FUNCTION_FAILED;
     }
 
-    len = lstrlenW(desc) + lstrlenW(driver_fmt) + lstrlenW(driver_file->FileName);
+    len = lstrlenW(desc) + lstrlenW(L"Driver=%s") + lstrlenW(driver_file->FileName);
     if (setup_file)
-        len += lstrlenW(setup_fmt) + lstrlenW(setup_file->FileName);
-    len += lstrlenW(usage_fmt) + 2; /* \0\0 */
+        len += lstrlenW(L"Setup=%s") + lstrlenW(setup_file->FileName);
+    len += lstrlenW(L"FileUsage=1") + 2; /* \0\0 */
 
     driver = msi_alloc(len * sizeof(WCHAR));
     if (!driver)
@@ -6698,16 +6258,16 @@ static UINT ITERATE_InstallODBCDriver( MSIRECORD *rec, LPVOID param )
     lstrcpyW(ptr, desc);
     ptr += lstrlenW(ptr) + 1;
 
-    len = swprintf(ptr, len - (ptr - driver), driver_fmt, driver_file->FileName);
+    len = swprintf(ptr, len - (ptr - driver), L"Driver=%s", driver_file->FileName);
     ptr += len + 1;
 
     if (setup_file)
     {
-        len = swprintf(ptr, len - (ptr - driver), setup_fmt, setup_file->FileName);
+        len = swprintf(ptr, len - (ptr - driver), L"Setup=%s", setup_file->FileName);
         ptr += len + 1;
     }
 
-    lstrcpyW(ptr, usage_fmt);
+    lstrcpyW(ptr, L"FileUsage=1");
     ptr += lstrlenW(ptr) + 1;
     *ptr = '\0';
 
@@ -6752,11 +6312,6 @@ static UINT ITERATE_InstallODBCTranslator( MSIRECORD *rec, LPVOID param )
     DWORD len, usage;
     UINT r = ERROR_SUCCESS;
 
-    static const WCHAR translator_fmt[] = {
-        'T','r','a','n','s','l','a','t','o','r','=','%','s',0};
-    static const WCHAR setup_fmt[] = {
-        'S','e','t','u','p','=','%','s',0};
-
     component = MSI_RecordGetString( rec, 2 );
     comp = msi_get_loaded_component( package, component );
     if (!comp)
@@ -6782,9 +6337,9 @@ static UINT ITERATE_InstallODBCTranslator( MSIRECORD *rec, LPVOID param )
         return ERROR_FUNCTION_FAILED;
     }
 
-    len = lstrlenW(desc) + lstrlenW(translator_fmt) + lstrlenW(translator_file->FileName) + 2; /* \0\0 */
+    len = lstrlenW(desc) + lstrlenW(L"Translator=%s") + lstrlenW(translator_file->FileName) + 2; /* \0\0 */
     if (setup_file)
-        len += lstrlenW(setup_fmt) + lstrlenW(setup_file->FileName);
+        len += lstrlenW(L"Setup=%s") + lstrlenW(setup_file->FileName);
 
     translator = msi_alloc(len * sizeof(WCHAR));
     if (!translator)
@@ -6794,12 +6349,12 @@ static UINT ITERATE_InstallODBCTranslator( MSIRECORD *rec, LPVOID param )
     lstrcpyW(ptr, desc);
     ptr += lstrlenW(ptr) + 1;
 
-    len = swprintf(ptr, len - (ptr - translator), translator_fmt, translator_file->FileName);
+    len = swprintf(ptr, len - (ptr - translator), L"Translator=%s", translator_file->FileName);
     ptr += len + 1;
 
     if (setup_file)
     {
-        len = swprintf(ptr, len - (ptr - translator), setup_fmt, setup_file->FileName);
+        len = swprintf(ptr, len - (ptr - translator), L"Setup=%s", setup_file->FileName);
         ptr += len + 1;
     }
     *ptr = '\0';
@@ -6840,9 +6395,6 @@ static UINT ITERATE_InstallODBCDataSource( MSIRECORD *rec, LPVOID param )
     UINT r = ERROR_SUCCESS;
     MSIRECORD *uirow;
 
-    static const WCHAR attrs_fmt[] = {
-        'D','S','N','=','%','s',0 };
-
     component = MSI_RecordGetString( rec, 2 );
     comp = msi_get_loaded_component( package, component );
     if (!comp)
@@ -6862,12 +6414,12 @@ static UINT ITERATE_InstallODBCDataSource( MSIRECORD *rec, LPVOID param )
     if (registration == msidbODBCDataSourceRegistrationPerMachine) request = ODBC_ADD_SYS_DSN;
     else if (registration == msidbODBCDataSourceRegistrationPerUser) request = ODBC_ADD_DSN;
 
-    len = lstrlenW(attrs_fmt) + lstrlenW(desc) + 2; /* \0\0 */
+    len = lstrlenW(L"DSN=%s") + lstrlenW(desc) + 2; /* \0\0 */
     attrs = msi_alloc(len * sizeof(WCHAR));
     if (!attrs)
         return ERROR_OUTOFMEMORY;
 
-    len = swprintf(attrs, len, attrs_fmt, desc);
+    len = swprintf(attrs, len, L"DSN=%s", desc);
     attrs[len + 1] = 0;
 
     if (!SQLConfigDataSourceW(NULL, request, driver, attrs))
@@ -6887,22 +6439,13 @@ static UINT ITERATE_InstallODBCDataSource( MSIRECORD *rec, LPVOID param )
 
 static UINT ACTION_InstallODBC( MSIPACKAGE *package )
 {
-    static const WCHAR driver_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'O','D','B','C','D','r','i','v','e','r',0};
-    static const WCHAR translator_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'O','D','B','C','T','r','a','n','s','l','a','t','o','r',0};
-    static const WCHAR source_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'O','D','B','C','D','a','t','a','S','o','u','r','c','e',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szInstallODBC);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"InstallODBC");
 
-    rc = MSI_DatabaseOpenViewW(package->db, driver_query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `ODBCDriver`", &view);
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords(view, NULL, ITERATE_InstallODBCDriver, package);
@@ -6910,7 +6453,7 @@ static UINT ACTION_InstallODBC( MSIPACKAGE *package )
         if (rc != ERROR_SUCCESS)
             return rc;
     }
-    rc = MSI_DatabaseOpenViewW(package->db, translator_query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `ODBCTranslator`", &view);
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords(view, NULL, ITERATE_InstallODBCTranslator, package);
@@ -6918,7 +6461,7 @@ static UINT ACTION_InstallODBC( MSIPACKAGE *package )
         if (rc != ERROR_SUCCESS)
             return rc;
     }
-    rc = MSI_DatabaseOpenViewW(package->db, source_query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `ODBCDataSource`", &view);
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords(view, NULL, ITERATE_InstallODBCDataSource, package);
@@ -7018,9 +6561,6 @@ static UINT ITERATE_RemoveODBCDataSource( MSIRECORD *rec, LPVOID param )
     INT registration;
     DWORD len;
 
-    static const WCHAR attrs_fmt[] = {
-        'D','S','N','=','%','s',0 };
-
     component = MSI_RecordGetString( rec, 2 );
     comp = msi_get_loaded_component( package, component );
     if (!comp)
@@ -7040,14 +6580,14 @@ static UINT ITERATE_RemoveODBCDataSource( MSIRECORD *rec, LPVOID param )
     if (registration == msidbODBCDataSourceRegistrationPerMachine) request = ODBC_REMOVE_SYS_DSN;
     else if (registration == msidbODBCDataSourceRegistrationPerUser) request = ODBC_REMOVE_DSN;
 
-    len = lstrlenW( attrs_fmt ) + lstrlenW( desc ) + 2; /* \0\0 */
+    len = lstrlenW( L"DSN=%s" ) + lstrlenW( desc ) + 2; /* \0\0 */
     attrs = msi_alloc( len * sizeof(WCHAR) );
     if (!attrs)
         return ERROR_OUTOFMEMORY;
 
     FIXME("Use ODBCSourceAttribute table\n");
 
-    len = swprintf( attrs, len, attrs_fmt, desc );
+    len = swprintf( attrs, len, L"DSN=%s", desc );
     attrs[len + 1] = 0;
 
     if (!SQLConfigDataSourceW( NULL, request, driver, attrs ))
@@ -7068,22 +6608,13 @@ static UINT ITERATE_RemoveODBCDataSource( MSIRECORD *rec, LPVOID param )
 
 static UINT ACTION_RemoveODBC( MSIPACKAGE *package )
 {
-    static const WCHAR driver_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'O','D','B','C','D','r','i','v','e','r',0};
-    static const WCHAR translator_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'O','D','B','C','T','r','a','n','s','l','a','t','o','r',0};
-    static const WCHAR source_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'O','D','B','C','D','a','t','a','S','o','u','r','c','e',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveODBC);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RemoveODBC");
 
-    rc = MSI_DatabaseOpenViewW( package->db, driver_query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `ODBCDriver`", &view );
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords( view, NULL, ITERATE_RemoveODBCDriver, package );
@@ -7091,7 +6622,7 @@ static UINT ACTION_RemoveODBC( MSIPACKAGE *package )
         if (rc != ERROR_SUCCESS)
             return rc;
     }
-    rc = MSI_DatabaseOpenViewW( package->db, translator_query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `ODBCTranslator`", &view );
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords( view, NULL, ITERATE_RemoveODBCTranslator, package );
@@ -7099,7 +6630,7 @@ static UINT ACTION_RemoveODBC( MSIPACKAGE *package )
         if (rc != ERROR_SUCCESS)
             return rc;
     }
-    rc = MSI_DatabaseOpenViewW( package->db, source_query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `ODBCDataSource`", &view );
     if (rc == ERROR_SUCCESS)
     {
         rc = MSI_IterateRecords( view, NULL, ITERATE_RemoveODBCDataSource, package );
@@ -7124,10 +6655,7 @@ static UINT ACTION_RemoveODBC( MSIPACKAGE *package )
 
 static UINT env_parse_flags( LPCWSTR *name, LPCWSTR *value, DWORD *flags )
 {
-    LPCWSTR cptr = *name;
-
-    static const WCHAR prefix[] = {'[','~',']',0};
-    static const int prefix_len = 3;
+    const WCHAR *cptr = *name;
 
     *flags = 0;
     while (*cptr)
@@ -7158,24 +6686,24 @@ static UINT env_parse_flags( LPCWSTR *name, LPCWSTR *value, DWORD *flags )
     if (*value)
     {
         LPCWSTR ptr = *value;
-        if (!wcsncmp(ptr, prefix, prefix_len))
+        if (!wcsncmp(ptr, L"[~]", 3))
         {
-            if (ptr[prefix_len] == szSemiColon[0])
+            if (ptr[3] == ';')
             {
                 *flags |= ENV_MOD_APPEND;
-                *value += lstrlenW(prefix);
+                *value += 3;
             }
             else
             {
                 *value = NULL;
             }
         }
-        else if (lstrlenW(*value) >= prefix_len)
+        else if (lstrlenW(*value) >= 3)
         {
-            ptr += lstrlenW(ptr) - prefix_len;
-            if (!wcscmp( ptr, prefix ))
+            ptr += lstrlenW(ptr) - 3;
+            if (!wcscmp( ptr, L"[~]" ))
             {
-                if ((ptr-1) > *value && *(ptr-1) == szSemiColon[0])
+                if ((ptr-1) > *value && *(ptr-1) == ';')
                 {
                     *flags |= ENV_MOD_PREFIX;
                     /* the "[~]" will be removed by deformat_string */;
@@ -7205,26 +6733,18 @@ static UINT env_parse_flags( LPCWSTR *name, LPCWSTR *value, DWORD *flags )
 
 static UINT open_env_key( DWORD flags, HKEY *key )
 {
-    static const WCHAR user_env[] =
-        {'E','n','v','i','r','o','n','m','e','n','t',0};
-    static const WCHAR machine_env[] =
-        {'S','y','s','t','e','m','\\',
-         'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
-         'C','o','n','t','r','o','l','\\',
-         'S','e','s','s','i','o','n',' ','M','a','n','a','g','e','r','\\',
-         'E','n','v','i','r','o','n','m','e','n','t',0};
     const WCHAR *env;
     HKEY root;
     LONG res;
 
     if (flags & ENV_MOD_MACHINE)
     {
-        env = machine_env;
+        env = L"System\\CurrentControlSet\\Control\\Session Manager\\Environment";
         root = HKEY_LOCAL_MACHINE;
     }
     else
     {
-        env = user_env;
+        env = L"Environment";
         root = HKEY_CURRENT_USER;
     }
 
@@ -7423,16 +6943,13 @@ done:
 
 static UINT ACTION_WriteEnvironmentStrings( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','E','n','v','i','r','o','n','m','e','n','t','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szWriteEnvironmentStrings);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"WriteEnvironmentStrings");
 
-    rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+    rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `Environment`", &view);
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -7568,16 +7085,13 @@ done:
 
 static UINT ACTION_RemoveEnvironmentStrings( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        '`','E','n','v','i','r','o','n','m','e','n','t','`',0};
     MSIQUERY *view;
     UINT rc;
 
     if (package->script == SCRIPT_NONE)
-        return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveEnvironmentStrings);
+        return msi_schedule_action(package, SCRIPT_INSTALL, L"RemoveEnvironmentStrings");
 
-    rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+    rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Environment`", &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
@@ -7591,18 +7105,18 @@ UINT msi_validate_product_id( MSIPACKAGE *package )
     LPWSTR key, template, id;
     UINT r = ERROR_SUCCESS;
 
-    id = msi_dup_property( package->db, szProductID );
+    id = msi_dup_property( package->db, L"ProductID" );
     if (id)
     {
         msi_free( id );
         return ERROR_SUCCESS;
     }
-    template = msi_dup_property( package->db, szPIDTemplate );
-    key = msi_dup_property( package->db, szPIDKEY );
+    template = msi_dup_property( package->db, L"PIDTemplate" );
+    key = msi_dup_property( package->db, L"PIDKEY" );
     if (key && template)
     {
         FIXME( "partial stub: template %s key %s\n", debugstr_w(template), debugstr_w(key) );
-        r = msi_set_property( package->db, szProductID, key, -1 );
+        r = msi_set_property( package->db, L"ProductID", key, -1 );
     }
     msi_free( template );
     msi_free( key );
@@ -7623,10 +7137,8 @@ static UINT ACTION_ScheduleReboot( MSIPACKAGE *package )
 
 static UINT ACTION_AllocateRegistrySpace( MSIPACKAGE *package )
 {
-    static const WCHAR szAvailableFreeReg[] =
-        {'A','V','A','I','L','A','B','L','E','F','R','E','E','R','E','G',0};
     MSIRECORD *uirow;
-    int space = msi_get_property_int( package->db, szAvailableFreeReg, 0 );
+    int space = msi_get_property_int( package->db, L"AVAILABLEFREEREG", 0 );
 
     TRACE("%p %d kilobytes\n", package, space);
 
@@ -7642,7 +7154,7 @@ static UINT ACTION_DisableRollback( MSIPACKAGE *package )
 {
     TRACE("%p\n", package);
 
-    msi_set_property( package->db, szRollbackDisabled, szOne, -1 );
+    msi_set_property( package->db, L"RollbackDisabled", L"1", -1 );
     return ERROR_SUCCESS;
 }
 
@@ -7654,16 +7166,10 @@ static UINT ACTION_InstallAdminPackage( MSIPACKAGE *package )
 
 static UINT ACTION_SetODBCFolders( MSIPACKAGE *package )
 {
-    static const WCHAR driver_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'O','D','B','C','D','r','i','v','e','r',0};
-    static const WCHAR translator_query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'O','D','B','C','T','r','a','n','s','l','a','t','o','r',0};
     MSIQUERY *view;
     UINT r, count;
 
-    r = MSI_DatabaseOpenViewW( package->db, driver_query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `ODBCDriver`", &view );
     if (r == ERROR_SUCCESS)
     {
         count = 0;
@@ -7673,7 +7179,7 @@ static UINT ACTION_SetODBCFolders( MSIPACKAGE *package )
             return r;
         if (count) FIXME("ignored %u rows in ODBCDriver table\n", count);
     }
-    r = MSI_DatabaseOpenViewW( package->db, translator_query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `ODBCTranslator`", &view );
     if (r == ERROR_SUCCESS)
     {
         count = 0;
@@ -7688,13 +7194,10 @@ static UINT ACTION_SetODBCFolders( MSIPACKAGE *package )
 
 static UINT ITERATE_RemoveExistingProducts( MSIRECORD *rec, LPVOID param )
 {
-    static const WCHAR fmtW[] =
-        {'m','s','i','e','x','e','c',' ','/','q','n',' ','/','i',' ','%','s',' ',
-         'R','E','M','O','V','E','=','%','s',0};
     MSIPACKAGE *package = param;
     const WCHAR *property = MSI_RecordGetString( rec, 7 );
     int attrs = MSI_RecordGetInteger( rec, 5 );
-    UINT len = ARRAY_SIZE( fmtW );
+    UINT len = ARRAY_SIZE( L"msiexec /qn /i %s REMOVE=%s" );
     WCHAR *product, *features, *cmd;
     STARTUPINFOW si;
     PROCESS_INFORMATION info;
@@ -7709,7 +7212,7 @@ static UINT ITERATE_RemoveExistingProducts( MSIRECORD *rec, LPVOID param )
     if (features)
         len += lstrlenW( features );
     else
-        len += ARRAY_SIZE( szAll );
+        len += ARRAY_SIZE( L"ALL" );
 
     if (!(cmd = msi_alloc( len * sizeof(WCHAR) )))
     {
@@ -7717,7 +7220,7 @@ static UINT ITERATE_RemoveExistingProducts( MSIRECORD *rec, LPVOID param )
         msi_free( features );
         return ERROR_OUTOFMEMORY;
     }
-    swprintf( cmd, len, fmtW, product, features ? features : szAll );
+    swprintf( cmd, len, L"msiexec /qn /i %s REMOVE=%s", product, features ? features : L"ALL" );
     msi_free( product );
     msi_free( features );
 
@@ -7734,12 +7237,10 @@ static UINT ITERATE_RemoveExistingProducts( MSIRECORD *rec, LPVOID param )
 
 static UINT ACTION_RemoveExistingProducts( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','U','p','g','r','a','d','e',0};
     MSIQUERY *view;
     UINT r;
 
-    r = MSI_DatabaseOpenViewW( package->db, query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Upgrade`", &view );
     if (r == ERROR_SUCCESS)
     {
         r = MSI_IterateRecords( view, NULL, ITERATE_RemoveExistingProducts, package );
@@ -7787,23 +7288,20 @@ static UINT ITERATE_MigrateFeatureStates( MSIRECORD *rec, LPVOID param )
 
 static UINT ACTION_MigrateFeatureStates( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'U','p','g','r','a','d','e',0};
     MSIQUERY *view;
     UINT r;
 
-    if (msi_get_property_int( package->db, szInstalled, 0 ))
+    if (msi_get_property_int( package->db, L"Installed", 0 ))
     {
         TRACE("product is installed, skipping action\n");
         return ERROR_SUCCESS;
     }
-    if (msi_get_property_int( package->db, szPreselected, 0 ))
+    if (msi_get_property_int( package->db, L"Preselected", 0 ))
     {
         TRACE("Preselected property is set, not migrating feature states\n");
         return ERROR_SUCCESS;
     }
-    r = MSI_DatabaseOpenViewW( package->db, query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Upgrade`", &view );
     if (r == ERROR_SUCCESS)
     {
         r = MSI_IterateRecords( view, NULL, ITERATE_MigrateFeatureStates, package );
@@ -7871,13 +7369,10 @@ static UINT ITERATE_BindImage( MSIRECORD *rec, LPVOID param )
 
 static UINT ACTION_BindImage( MSIPACKAGE *package )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-        'B','i','n','d','I','m','a','g','e',0};
     MSIQUERY *view;
     UINT r;
 
-    r = MSI_DatabaseOpenViewW( package->db, query, &view );
+    r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `BindImage`", &view );
     if (r == ERROR_SUCCESS)
     {
         MSI_IterateRecords( view, NULL, ITERATE_BindImage, package );
@@ -7888,13 +7383,11 @@ static UINT ACTION_BindImage( MSIPACKAGE *package )
 
 static UINT msi_unimplemented_action_stub( MSIPACKAGE *package, LPCSTR action, LPCWSTR table )
 {
-    static const WCHAR query[] = {
-        'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','%','s','`',0};
     MSIQUERY *view;
     DWORD count = 0;
     UINT r;
-    
-    r = MSI_OpenQuery( package->db, &view, query, table );
+
+    r = MSI_OpenQuery( package->db, &view, L"SELECT * FROM `%s`", table );
     if (r == ERROR_SUCCESS)
     {
         r = MSI_IterateRecords(view, &count, NULL, package);
@@ -7908,33 +7401,27 @@ static UINT msi_unimplemented_action_stub( MSIPACKAGE *package, LPCSTR action, L
 
 static UINT ACTION_IsolateComponents( MSIPACKAGE *package )
 {
-    static const WCHAR table[] = {
-        'I','s','o','l','a','t','e','d','C','o','m','p','o','n','e','n','t',0 };
-    return msi_unimplemented_action_stub( package, "IsolateComponents", table );
+    return msi_unimplemented_action_stub( package, "IsolateComponents", L"IsolateComponent" );
 }
 
 static UINT ACTION_RMCCPSearch( MSIPACKAGE *package )
 {
-    static const WCHAR table[] = { 'C','C','P','S','e','a','r','c','h',0 };
-    return msi_unimplemented_action_stub( package, "RMCCPSearch", table );
+    return msi_unimplemented_action_stub( package, "RMCCPSearch", L"CCPSearch" );
 }
 
 static UINT ACTION_RegisterComPlus( MSIPACKAGE *package )
 {
-    static const WCHAR table[] = { 'C','o','m','p','l','u','s',0 };
-    return msi_unimplemented_action_stub( package, "RegisterComPlus", table );
+    return msi_unimplemented_action_stub( package, "RegisterComPlus", L"Complus" );
 }
 
 static UINT ACTION_UnregisterComPlus( MSIPACKAGE *package )
 {
-    static const WCHAR table[] = { 'C','o','m','p','l','u','s',0 };
-    return msi_unimplemented_action_stub( package, "UnregisterComPlus", table );
+    return msi_unimplemented_action_stub( package, "UnregisterComPlus", L"Complus" );
 }
 
 static UINT ACTION_InstallSFPCatalogFile( MSIPACKAGE *package )
 {
-    static const WCHAR table[] = { 'S','F','P','C','a','t','a','l','o','g',0 };
-    return msi_unimplemented_action_stub( package, "InstallSFPCatalogFile", table );
+    return msi_unimplemented_action_stub( package, "InstallSFPCatalogFile", L"SFPCatalog" );
 }
 
 static const struct
@@ -7947,83 +7434,83 @@ static const struct
 }
 StandardActions[] =
 {
-    { szAllocateRegistrySpace, IDS_DESC_ALLOCATEREGISTRYSPACE, IDS_TEMP_ALLOCATEREGISTRYSPACE, ACTION_AllocateRegistrySpace, NULL },
-    { szAppSearch, IDS_DESC_APPSEARCH, IDS_TEMP_APPSEARCH, ACTION_AppSearch, NULL },
-    { szBindImage, IDS_DESC_BINDIMAGE, IDS_TEMP_BINDIMAGE, ACTION_BindImage, NULL },
-    { szCCPSearch, IDS_DESC_CCPSEARCH, 0, ACTION_CCPSearch, NULL },
-    { szCostFinalize, IDS_DESC_COSTFINALIZE, 0, ACTION_CostFinalize, NULL },
-    { szCostInitialize, IDS_DESC_COSTINITIALIZE, 0, ACTION_CostInitialize, NULL },
-    { szCreateFolders, IDS_DESC_CREATEFOLDERS, IDS_TEMP_CREATEFOLDERS, ACTION_CreateFolders, szRemoveFolders },
-    { szCreateShortcuts, IDS_DESC_CREATESHORTCUTS, IDS_TEMP_CREATESHORTCUTS, ACTION_CreateShortcuts, szRemoveShortcuts },
-    { szDeleteServices, IDS_DESC_DELETESERVICES, IDS_TEMP_DELETESERVICES, ACTION_DeleteServices, szInstallServices },
-    { szDisableRollback, 0, 0, ACTION_DisableRollback, NULL },
-    { szDuplicateFiles, IDS_DESC_DUPLICATEFILES, IDS_TEMP_DUPLICATEFILES, ACTION_DuplicateFiles, szRemoveDuplicateFiles },
-    { szExecuteAction, 0, 0, ACTION_ExecuteAction, NULL },
-    { szFileCost, IDS_DESC_FILECOST, 0, ACTION_FileCost, NULL },
-    { szFindRelatedProducts, IDS_DESC_FINDRELATEDPRODUCTS, IDS_TEMP_FINDRELATEDPRODUCTS, ACTION_FindRelatedProducts, NULL },
-    { szForceReboot, 0, 0, ACTION_ForceReboot, NULL },
-    { szInstallAdminPackage, IDS_DESC_INSTALLADMINPACKAGE, IDS_TEMP_INSTALLADMINPACKAGE, ACTION_InstallAdminPackage, NULL },
-    { szInstallExecute, 0, 0, ACTION_InstallExecute, NULL },
-    { szInstallExecuteAgain, 0, 0, ACTION_InstallExecute, NULL },
-    { szInstallFiles, IDS_DESC_INSTALLFILES, IDS_TEMP_INSTALLFILES, ACTION_InstallFiles, szRemoveFiles },
-    { szInstallFinalize, 0, 0, ACTION_InstallFinalize, NULL },
-    { szInstallInitialize, 0, 0, ACTION_InstallInitialize, NULL },
-    { szInstallODBC, IDS_DESC_INSTALLODBC, 0, ACTION_InstallODBC, szRemoveODBC },
-    { szInstallServices, IDS_DESC_INSTALLSERVICES, IDS_TEMP_INSTALLSERVICES, ACTION_InstallServices, szDeleteServices },
-    { szInstallSFPCatalogFile, IDS_DESC_INSTALLSFPCATALOGFILE, IDS_TEMP_INSTALLSFPCATALOGFILE, ACTION_InstallSFPCatalogFile, NULL },
-    { szInstallValidate, IDS_DESC_INSTALLVALIDATE, 0, ACTION_InstallValidate, NULL },
-    { szIsolateComponents, 0, 0, ACTION_IsolateComponents, NULL },
-    { szLaunchConditions, IDS_DESC_LAUNCHCONDITIONS, 0, ACTION_LaunchConditions, NULL },
-    { szMigrateFeatureStates, IDS_DESC_MIGRATEFEATURESTATES, IDS_TEMP_MIGRATEFEATURESTATES, ACTION_MigrateFeatureStates, NULL },
-    { szMoveFiles, IDS_DESC_MOVEFILES, IDS_TEMP_MOVEFILES, ACTION_MoveFiles, NULL },
-    { szMsiPublishAssemblies, IDS_DESC_MSIPUBLISHASSEMBLIES, IDS_TEMP_MSIPUBLISHASSEMBLIES, ACTION_MsiPublishAssemblies, szMsiUnpublishAssemblies },
-    { szMsiUnpublishAssemblies, IDS_DESC_MSIUNPUBLISHASSEMBLIES, IDS_TEMP_MSIUNPUBLISHASSEMBLIES, ACTION_MsiUnpublishAssemblies, szMsiPublishAssemblies },
-    { szPatchFiles, IDS_DESC_PATCHFILES, IDS_TEMP_PATCHFILES, ACTION_PatchFiles, NULL },
-    { szProcessComponents, IDS_DESC_PROCESSCOMPONENTS, 0, ACTION_ProcessComponents, szProcessComponents },
-    { szPublishComponents, IDS_DESC_PUBLISHCOMPONENTS, IDS_TEMP_PUBLISHCOMPONENTS, ACTION_PublishComponents, szUnpublishComponents },
-    { szPublishFeatures, IDS_DESC_PUBLISHFEATURES, IDS_TEMP_PUBLISHFEATURES, ACTION_PublishFeatures, szUnpublishFeatures },
-    { szPublishProduct, IDS_DESC_PUBLISHPRODUCT, 0, ACTION_PublishProduct, szUnpublishProduct },
-    { szRegisterClassInfo, IDS_DESC_REGISTERCLASSINFO, IDS_TEMP_REGISTERCLASSINFO, ACTION_RegisterClassInfo, szUnregisterClassInfo },
-    { szRegisterComPlus, IDS_DESC_REGISTERCOMPLUS, IDS_TEMP_REGISTERCOMPLUS, ACTION_RegisterComPlus, szUnregisterComPlus },
-    { szRegisterExtensionInfo, IDS_DESC_REGISTEREXTENSIONINFO, 0, ACTION_RegisterExtensionInfo, szUnregisterExtensionInfo },
-    { szRegisterFonts, IDS_DESC_REGISTERFONTS, IDS_TEMP_REGISTERFONTS, ACTION_RegisterFonts, szUnregisterFonts },
-    { szRegisterMIMEInfo, IDS_DESC_REGISTERMIMEINFO, IDS_TEMP_REGISTERMIMEINFO, ACTION_RegisterMIMEInfo, szUnregisterMIMEInfo },
-    { szRegisterProduct, IDS_DESC_REGISTERPRODUCT, 0, ACTION_RegisterProduct, NULL },
-    { szRegisterProgIdInfo, IDS_DESC_REGISTERPROGIDINFO, IDS_TEMP_REGISTERPROGIDINFO, ACTION_RegisterProgIdInfo, szUnregisterProgIdInfo },
-    { szRegisterTypeLibraries, IDS_DESC_REGISTERTYPELIBRARIES, IDS_TEMP_REGISTERTYPELIBRARIES, ACTION_RegisterTypeLibraries, szUnregisterTypeLibraries },
-    { szRegisterUser, IDS_DESC_REGISTERUSER, 0, ACTION_RegisterUser, NULL },
-    { szRemoveDuplicateFiles, IDS_DESC_REMOVEDUPLICATEFILES, IDS_TEMP_REMOVEDUPLICATEFILES, ACTION_RemoveDuplicateFiles, szDuplicateFiles },
-    { szRemoveEnvironmentStrings, IDS_DESC_REMOVEENVIRONMENTSTRINGS, IDS_TEMP_REMOVEENVIRONMENTSTRINGS, ACTION_RemoveEnvironmentStrings, szWriteEnvironmentStrings },
-    { szRemoveExistingProducts, IDS_DESC_REMOVEEXISTINGPRODUCTS, IDS_TEMP_REMOVEEXISTINGPRODUCTS, ACTION_RemoveExistingProducts, NULL },
-    { szRemoveFiles, IDS_DESC_REMOVEFILES, IDS_TEMP_REMOVEFILES, ACTION_RemoveFiles, szInstallFiles },
-    { szRemoveFolders, IDS_DESC_REMOVEFOLDERS, IDS_TEMP_REMOVEFOLDERS, ACTION_RemoveFolders, szCreateFolders },
-    { szRemoveIniValues, IDS_DESC_REMOVEINIVALUES, IDS_TEMP_REMOVEINIVALUES, ACTION_RemoveIniValues, szWriteIniValues },
-    { szRemoveODBC, IDS_DESC_REMOVEODBC, 0, ACTION_RemoveODBC, szInstallODBC },
-    { szRemoveRegistryValues, IDS_DESC_REMOVEREGISTRYVALUES, IDS_TEMP_REMOVEREGISTRYVALUES, ACTION_RemoveRegistryValues, szWriteRegistryValues },
-    { szRemoveShortcuts, IDS_DESC_REMOVESHORTCUTS, IDS_TEMP_REMOVESHORTCUTS, ACTION_RemoveShortcuts, szCreateShortcuts },
-    { szResolveSource, 0, 0, ACTION_ResolveSource, NULL },
-    { szRMCCPSearch, IDS_DESC_RMCCPSEARCH, 0, ACTION_RMCCPSearch, NULL },
-    { szScheduleReboot, 0, 0, ACTION_ScheduleReboot, NULL },
-    { szSelfRegModules, IDS_DESC_SELFREGMODULES, IDS_TEMP_SELFREGMODULES, ACTION_SelfRegModules, szSelfUnregModules },
-    { szSelfUnregModules, IDS_DESC_SELFUNREGMODULES, IDS_TEMP_SELFUNREGMODULES, ACTION_SelfUnregModules, szSelfRegModules },
-    { szSetODBCFolders, IDS_DESC_SETODBCFOLDERS, 0, ACTION_SetODBCFolders, NULL },
-    { szStartServices, IDS_DESC_STARTSERVICES, IDS_TEMP_STARTSERVICES, ACTION_StartServices, szStopServices },
-    { szStopServices, IDS_DESC_STOPSERVICES, IDS_TEMP_STOPSERVICES, ACTION_StopServices, szStartServices },
-    { szUnpublishComponents, IDS_DESC_UNPUBLISHCOMPONENTS, IDS_TEMP_UNPUBLISHCOMPONENTS, ACTION_UnpublishComponents, szPublishComponents },
-    { szUnpublishFeatures, IDS_DESC_UNPUBLISHFEATURES, IDS_TEMP_UNPUBLISHFEATURES, ACTION_UnpublishFeatures, szPublishFeatures },
-    { szUnpublishProduct, IDS_DESC_UNPUBLISHPRODUCT, 0, ACTION_UnpublishProduct, NULL }, /* for rollback only */
-    { szUnregisterClassInfo, IDS_DESC_UNREGISTERCLASSINFO, IDS_TEMP_UNREGISTERCLASSINFO, ACTION_UnregisterClassInfo, szRegisterClassInfo },
-    { szUnregisterComPlus, IDS_DESC_UNREGISTERCOMPLUS, IDS_TEMP_UNREGISTERCOMPLUS, ACTION_UnregisterComPlus, szRegisterComPlus },
-    { szUnregisterExtensionInfo, IDS_DESC_UNREGISTEREXTENSIONINFO, IDS_TEMP_UNREGISTEREXTENSIONINFO, ACTION_UnregisterExtensionInfo, szRegisterExtensionInfo },
-    { szUnregisterFonts, IDS_DESC_UNREGISTERFONTS, IDS_TEMP_UNREGISTERFONTS, ACTION_UnregisterFonts, szRegisterFonts },
-    { szUnregisterMIMEInfo, IDS_DESC_UNREGISTERMIMEINFO, IDS_TEMP_UNREGISTERMIMEINFO, ACTION_UnregisterMIMEInfo, szRegisterMIMEInfo },
-    { szUnregisterProgIdInfo, IDS_DESC_UNREGISTERPROGIDINFO, IDS_TEMP_UNREGISTERPROGIDINFO, ACTION_UnregisterProgIdInfo, szRegisterProgIdInfo },
-    { szUnregisterTypeLibraries, IDS_DESC_UNREGISTERTYPELIBRARIES, IDS_TEMP_UNREGISTERTYPELIBRARIES, ACTION_UnregisterTypeLibraries, szRegisterTypeLibraries },
-    { szValidateProductID, 0, 0, ACTION_ValidateProductID, NULL },
-    { szWriteEnvironmentStrings, IDS_DESC_WRITEENVIRONMENTSTRINGS, IDS_TEMP_WRITEENVIRONMENTSTRINGS, ACTION_WriteEnvironmentStrings, szRemoveEnvironmentStrings },
-    { szWriteIniValues, IDS_DESC_WRITEINIVALUES, IDS_TEMP_WRITEINIVALUES, ACTION_WriteIniValues, szRemoveIniValues },
-    { szWriteRegistryValues, IDS_DESC_WRITEREGISTRYVALUES, IDS_TEMP_WRITEREGISTRYVALUES, ACTION_WriteRegistryValues, szRemoveRegistryValues },
-    { szINSTALL, 0, 0, ACTION_INSTALL, NULL },
+    { L"AllocateRegistrySpace", IDS_DESC_ALLOCATEREGISTRYSPACE, IDS_TEMP_ALLOCATEREGISTRYSPACE, ACTION_AllocateRegistrySpace, NULL },
+    { L"AppSearch", IDS_DESC_APPSEARCH, IDS_TEMP_APPSEARCH, ACTION_AppSearch, NULL },
+    { L"BindImage", IDS_DESC_BINDIMAGE, IDS_TEMP_BINDIMAGE, ACTION_BindImage, NULL },
+    { L"CCPSearch", IDS_DESC_CCPSEARCH, 0, ACTION_CCPSearch, NULL },
+    { L"CostFinalize", IDS_DESC_COSTFINALIZE, 0, ACTION_CostFinalize, NULL },
+    { L"CostInitialize", IDS_DESC_COSTINITIALIZE, 0, ACTION_CostInitialize, NULL },
+    { L"CreateFolders", IDS_DESC_CREATEFOLDERS, IDS_TEMP_CREATEFOLDERS, ACTION_CreateFolders, L"RemoveFolders" },
+    { L"CreateShortcuts", IDS_DESC_CREATESHORTCUTS, IDS_TEMP_CREATESHORTCUTS, ACTION_CreateShortcuts, L"RemoveShortcuts" },
+    { L"DeleteServices", IDS_DESC_DELETESERVICES, IDS_TEMP_DELETESERVICES, ACTION_DeleteServices, L"InstallServices" },
+    { L"DisableRollback", 0, 0, ACTION_DisableRollback, NULL },
+    { L"DuplicateFiles", IDS_DESC_DUPLICATEFILES, IDS_TEMP_DUPLICATEFILES, ACTION_DuplicateFiles, L"RemoveDuplicateFiles" },
+    { L"ExecuteAction", 0, 0, ACTION_ExecuteAction, NULL },
+    { L"FileCost", IDS_DESC_FILECOST, 0, ACTION_FileCost, NULL },
+    { L"FindRelatedProducts", IDS_DESC_FINDRELATEDPRODUCTS, IDS_TEMP_FINDRELATEDPRODUCTS, ACTION_FindRelatedProducts, NULL },
+    { L"ForceReboot", 0, 0, ACTION_ForceReboot, NULL },
+    { L"InstallAdminPackage", IDS_DESC_INSTALLADMINPACKAGE, IDS_TEMP_INSTALLADMINPACKAGE, ACTION_InstallAdminPackage, NULL },
+    { L"InstallExecute", 0, 0, ACTION_InstallExecute, NULL },
+    { L"InstallExecuteAgain", 0, 0, ACTION_InstallExecute, NULL },
+    { L"InstallFiles", IDS_DESC_INSTALLFILES, IDS_TEMP_INSTALLFILES, ACTION_InstallFiles, L"RemoveFiles" },
+    { L"InstallFinalize", 0, 0, ACTION_InstallFinalize, NULL },
+    { L"InstallInitialize", 0, 0, ACTION_InstallInitialize, NULL },
+    { L"InstallODBC", IDS_DESC_INSTALLODBC, 0, ACTION_InstallODBC, L"RemoveODBC" },
+    { L"InstallServices", IDS_DESC_INSTALLSERVICES, IDS_TEMP_INSTALLSERVICES, ACTION_InstallServices, L"DeleteServices" },
+    { L"InstallSFPCatalogFile", IDS_DESC_INSTALLSFPCATALOGFILE, IDS_TEMP_INSTALLSFPCATALOGFILE, ACTION_InstallSFPCatalogFile, NULL },
+    { L"InstallValidate", IDS_DESC_INSTALLVALIDATE, 0, ACTION_InstallValidate, NULL },
+    { L"IsolateComponents", 0, 0, ACTION_IsolateComponents, NULL },
+    { L"LaunchConditions", IDS_DESC_LAUNCHCONDITIONS, 0, ACTION_LaunchConditions, NULL },
+    { L"MigrateFeutureStates", IDS_DESC_MIGRATEFEATURESTATES, IDS_TEMP_MIGRATEFEATURESTATES, ACTION_MigrateFeatureStates, NULL },
+    { L"MoveFiles", IDS_DESC_MOVEFILES, IDS_TEMP_MOVEFILES, ACTION_MoveFiles, NULL },
+    { L"MsiPublishAssemblies", IDS_DESC_MSIPUBLISHASSEMBLIES, IDS_TEMP_MSIPUBLISHASSEMBLIES, ACTION_MsiPublishAssemblies, L"MsiUnpublishAssemblies" },
+    { L"MsiUnpublishAssemblies", IDS_DESC_MSIUNPUBLISHASSEMBLIES, IDS_TEMP_MSIUNPUBLISHASSEMBLIES, ACTION_MsiUnpublishAssemblies, L"MsiPublishAssemblies" },
+    { L"PatchFiles", IDS_DESC_PATCHFILES, IDS_TEMP_PATCHFILES, ACTION_PatchFiles, NULL },
+    { L"ProcessComponents", IDS_DESC_PROCESSCOMPONENTS, 0, ACTION_ProcessComponents, L"ProcessComponents" },
+    { L"PublishComponents", IDS_DESC_PUBLISHCOMPONENTS, IDS_TEMP_PUBLISHCOMPONENTS, ACTION_PublishComponents, L"UnpublishComponents" },
+    { L"PublishFeatures", IDS_DESC_PUBLISHFEATURES, IDS_TEMP_PUBLISHFEATURES, ACTION_PublishFeatures, L"UnpublishFeatures" },
+    { L"PublishProduct", IDS_DESC_PUBLISHPRODUCT, 0, ACTION_PublishProduct, L"UnpublishProduct" },
+    { L"RegisterClassInfo", IDS_DESC_REGISTERCLASSINFO, IDS_TEMP_REGISTERCLASSINFO, ACTION_RegisterClassInfo, L"UnregisterClassInfo" },
+    { L"RegisterComPlus", IDS_DESC_REGISTERCOMPLUS, IDS_TEMP_REGISTERCOMPLUS, ACTION_RegisterComPlus, L"UnregisterComPlus" },
+    { L"RegisterExtensionInfo", IDS_DESC_REGISTEREXTENSIONINFO, 0, ACTION_RegisterExtensionInfo, L"UnregisterExtensionInfo" },
+    { L"RegisterFonts", IDS_DESC_REGISTERFONTS, IDS_TEMP_REGISTERFONTS, ACTION_RegisterFonts, L"UnregisterFonts" },
+    { L"RegisterMIMEInfo", IDS_DESC_REGISTERMIMEINFO, IDS_TEMP_REGISTERMIMEINFO, ACTION_RegisterMIMEInfo, L"UnregisterMIMEInfo" },
+    { L"RegisterProduct", IDS_DESC_REGISTERPRODUCT, 0, ACTION_RegisterProduct, NULL },
+    { L"RegisterProgIdInfo", IDS_DESC_REGISTERPROGIDINFO, IDS_TEMP_REGISTERPROGIDINFO, ACTION_RegisterProgIdInfo, L"UnregisterProgIdInfo" },
+    { L"RegisterTypeLibraries", IDS_DESC_REGISTERTYPELIBRARIES, IDS_TEMP_REGISTERTYPELIBRARIES, ACTION_RegisterTypeLibraries, L"UnregisterTypeLibraries" },
+    { L"RegisterUser", IDS_DESC_REGISTERUSER, 0, ACTION_RegisterUser, NULL },
+    { L"RemoveDuplicateFiles", IDS_DESC_REMOVEDUPLICATEFILES, IDS_TEMP_REMOVEDUPLICATEFILES, ACTION_RemoveDuplicateFiles, L"DuplicateFiles" },
+    { L"RemoveEnvironmentStrings", IDS_DESC_REMOVEENVIRONMENTSTRINGS, IDS_TEMP_REMOVEENVIRONMENTSTRINGS, ACTION_RemoveEnvironmentStrings, L"WriteEnvironmentStrings" },
+    { L"RemoveExistingProducts", IDS_DESC_REMOVEEXISTINGPRODUCTS, IDS_TEMP_REMOVEEXISTINGPRODUCTS, ACTION_RemoveExistingProducts, NULL },
+    { L"RemoveFiles", IDS_DESC_REMOVEFILES, IDS_TEMP_REMOVEFILES, ACTION_RemoveFiles, L"InstallFiles" },
+    { L"RemoveFolders", IDS_DESC_REMOVEFOLDERS, IDS_TEMP_REMOVEFOLDERS, ACTION_RemoveFolders, L"CreateFolders" },
+    { L"RemoveIniValues", IDS_DESC_REMOVEINIVALUES, IDS_TEMP_REMOVEINIVALUES, ACTION_RemoveIniValues, L"WriteIniValues" },
+    { L"RemoveODBC", IDS_DESC_REMOVEODBC, 0, ACTION_RemoveODBC, L"InstallODBC" },
+    { L"RemoveRegistryValues", IDS_DESC_REMOVEREGISTRYVALUES, IDS_TEMP_REMOVEREGISTRYVALUES, ACTION_RemoveRegistryValues, L"WriteRegistryValues" },
+    { L"RemoveShortcuts", IDS_DESC_REMOVESHORTCUTS, IDS_TEMP_REMOVESHORTCUTS, ACTION_RemoveShortcuts, L"CreateShortcuts" },
+    { L"ResolveSource", 0, 0, ACTION_ResolveSource, NULL },
+    { L"RMCCPSearch", IDS_DESC_RMCCPSEARCH, 0, ACTION_RMCCPSearch, NULL },
+    { L"ScheduleReboot", 0, 0, ACTION_ScheduleReboot, NULL },
+    { L"SelfRegModules", IDS_DESC_SELFREGMODULES, IDS_TEMP_SELFREGMODULES, ACTION_SelfRegModules, L"SelfUnregModules" },
+    { L"SelfUnregModules", IDS_DESC_SELFUNREGMODULES, IDS_TEMP_SELFUNREGMODULES, ACTION_SelfUnregModules, L"SelfRegModules" },
+    { L"SetODBCFolders", IDS_DESC_SETODBCFOLDERS, 0, ACTION_SetODBCFolders, NULL },
+    { L"StartServices", IDS_DESC_STARTSERVICES, IDS_TEMP_STARTSERVICES, ACTION_StartServices, L"StopServices" },
+    { L"StopServices", IDS_DESC_STOPSERVICES, IDS_TEMP_STOPSERVICES, ACTION_StopServices, L"StartServices" },
+    { L"UnpublishComponents", IDS_DESC_UNPUBLISHCOMPONENTS, IDS_TEMP_UNPUBLISHCOMPONENTS, ACTION_UnpublishComponents, L"PublishComponents" },
+    { L"UnpublishFeatures", IDS_DESC_UNPUBLISHFEATURES, IDS_TEMP_UNPUBLISHFEATURES, ACTION_UnpublishFeatures, L"PublishFeatures" },
+    { L"UnpublishProduct", IDS_DESC_UNPUBLISHPRODUCT, 0, ACTION_UnpublishProduct, NULL }, /* for rollback only */
+    { L"UnregisterClassInfo", IDS_DESC_UNREGISTERCLASSINFO, IDS_TEMP_UNREGISTERCLASSINFO, ACTION_UnregisterClassInfo, L"RegisterClassInfo" },
+    { L"UnregisterComPlus", IDS_DESC_UNREGISTERCOMPLUS, IDS_TEMP_UNREGISTERCOMPLUS, ACTION_UnregisterComPlus, L"RegisterComPlus" },
+    { L"UnregisterExtensionInfo", IDS_DESC_UNREGISTEREXTENSIONINFO, IDS_TEMP_UNREGISTEREXTENSIONINFO, ACTION_UnregisterExtensionInfo, L"RegisterExtensionInfo" },
+    { L"UnregisterFonts", IDS_DESC_UNREGISTERFONTS, IDS_TEMP_UNREGISTERFONTS, ACTION_UnregisterFonts, L"RegisterFonts" },
+    { L"UnregisterMIMEInfo", IDS_DESC_UNREGISTERMIMEINFO, IDS_TEMP_UNREGISTERMIMEINFO, ACTION_UnregisterMIMEInfo, L"RegisterMIMEInfo" },
+    { L"UnregisterProgIdInfo", IDS_DESC_UNREGISTERPROGIDINFO, IDS_TEMP_UNREGISTERPROGIDINFO, ACTION_UnregisterProgIdInfo, L"RegisterProgIdInfo" },
+    { L"UnregisterTypeLibraries", IDS_DESC_UNREGISTERTYPELIBRARIES, IDS_TEMP_UNREGISTERTYPELIBRARIES, ACTION_UnregisterTypeLibraries, L"RegisterTypeLibraries" },
+    { L"ValidateProductID", 0, 0, ACTION_ValidateProductID, NULL },
+    { L"WriteEnvironmentStrings", IDS_DESC_WRITEENVIRONMENTSTRINGS, IDS_TEMP_WRITEENVIRONMENTSTRINGS, ACTION_WriteEnvironmentStrings, L"RemoveEnvironmentStrings" },
+    { L"WriteIniValues", IDS_DESC_WRITEINIVALUES, IDS_TEMP_WRITEINIVALUES, ACTION_WriteIniValues, L"RemoveIniValues" },
+    { L"WriteRegistryValues", IDS_DESC_WRITEREGISTRYVALUES, IDS_TEMP_WRITEREGISTRYVALUES, ACTION_WriteRegistryValues, L"RemoveRegistryValues" },
+    { L"INSTALL", 0, 0, ACTION_INSTALL, NULL },
     { 0 }
 };
 
@@ -8093,21 +7580,10 @@ static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq)
     UINT rc = ERROR_SUCCESS;
     MSIRECORD *row;
 
-    static const WCHAR query[] =
-        {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-         '`','I','n','s','t','a','l','l','E','x','e','c','u','t','e',
-         'S','e','q','u','e','n','c','e','`',' ', 'W','H','E','R','E',' ',
-         '`','S','e','q','u','e','n','c','e','`',' ', '=',' ','%','i',0};
-    static const WCHAR ui_query[] =
-        {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
-     '`','I','n','s','t','a','l','l','U','I','S','e','q','u','e','n','c','e',
-     '`', ' ', 'W','H','E','R','E',' ','`','S','e','q','u','e','n','c','e','`',
-	 ' ', '=',' ','%','i',0};
-
     if (needs_ui_sequence(package))
-        row = MSI_QueryGetRecord(package->db, ui_query, seq);
+        row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `InstallUISequence` WHERE `Sequence` = %d", seq);
     else
-        row = MSI_QueryGetRecord(package->db, query, seq);
+        row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `InstallExecuteSequence` WHERE `Sequence` = %d", seq);
 
     if (row)
     {
@@ -8148,8 +7624,6 @@ static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq)
 UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
                          LPCWSTR szCommandLine )
 {
-    static const WCHAR szDisableRollback[] = {'D','I','S','A','B','L','E','R','O','L','L','B','A','C','K',0};
-    static const WCHAR szAction[] = {'A','C','T','I','O','N',0};
     WCHAR *reinstall = NULL, *productcode, *action;
     UINT rc;
     DWORD len = 0;
@@ -8171,7 +7645,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
             msi_free(dir);
             dir = msi_alloc(MAX_PATH * sizeof(WCHAR));
             GetCurrentDirectoryW(MAX_PATH, dir);
-            lstrcatW(dir, szBackSlash);
+            lstrcatW(dir, L"\\");
             file = szPackagePath;
         }
 
@@ -8197,9 +7671,9 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
     msi_apply_transforms( package );
     msi_apply_patches( package );
 
-    if (msi_get_property( package->db, szAction, NULL, &len ))
-        msi_set_property( package->db, szAction, szINSTALL, -1 );
-    action = msi_dup_property( package->db, szAction );
+    if (msi_get_property( package->db, L"ACTION", NULL, &len ))
+        msi_set_property( package->db, L"ACTION", L"INSTALL", -1 );
+    action = msi_dup_property( package->db, L"ACTION" );
     CharUpperW(action);
 
     msi_set_original_database_property( package->db, szPackagePath );
@@ -8207,7 +7681,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
     msi_adjust_privilege_properties( package );
     msi_set_context( package );
 
-    productcode = msi_dup_property( package->db, szProductCode );
+    productcode = msi_dup_property( package->db, L"ProductCode" );
     if (wcsicmp( productcode, package->ProductCode ))
     {
         TRACE( "product code changed %s -> %s\n", debugstr_w(package->ProductCode), debugstr_w(productcode) );
@@ -8216,10 +7690,10 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
     }
     else msi_free( productcode );
 
-    if (msi_get_property_int( package->db, szDisableRollback, 0 ))
+    if (msi_get_property_int( package->db, L"DISABLEROLLBACK", 0 ))
     {
         TRACE("disabling rollback\n");
-        msi_set_property( package->db, szRollbackDisabled, szOne, -1 );
+        msi_set_property( package->db, L"RollbackDisabled", L"1", -1 );
     }
 
     rc = ACTION_PerformAction(package, action);
@@ -8234,7 +7708,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
     else  /* failed */
     {
         ACTION_PerformActionSequence(package, -3);
-        if (!msi_get_property_int( package->db, szRollbackDisabled, 0 ))
+        if (!msi_get_property_int( package->db, L"RollbackDisabled", 0 ))
         {
             package->need_rollback = TRUE;
         }
@@ -8243,7 +7717,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
     /* finish up running custom actions */
     ACTION_FinishCustomActions(package);
 
-    if (package->need_rollback && !(reinstall = msi_dup_property( package->db, szReinstall )))
+    if (package->need_rollback && !(reinstall = msi_dup_property( package->db, L"REINSTALL" )))
     {
         WARN("installation failed, running rollback script\n");
         execute_script( package, SCRIPT_ROLLBACK );
-- 
2.28.0




More information about the wine-devel mailing list