Signed-off-by: Hans Leidekker hans@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 );