Module: wine Branch: master Commit: 0d0074d56be678ea0480eb4bfbe69685bf0eb453 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0d0074d56be678ea0480eb4bfb...
Author: Hans Leidekker hans@codeweavers.com Date: Mon May 2 16:03:14 2011 +0200
msi: Skip disabled components in the InstallService action.
---
dlls/msi/action.c | 33 +++++++++++++++++++-------------- 1 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 7bed12f..da59d3a 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -5945,23 +5945,33 @@ 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; MSIFILE *file; - SC_HANDLE hscm, service = NULL; + SC_HANDLE hscm = NULL, service = NULL; LPCWSTR comp, key; LPWSTR name = NULL, disp = NULL, load_order = NULL, serv_name = NULL; LPWSTR depends = NULL, pass = NULL, args = NULL, image_path = NULL; DWORD serv_type, start_type, err_control; SERVICE_DESCRIPTIONW sd = {NULL};
- 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}; - + comp = MSI_RecordGetString( rec, 12 ); + component = get_loaded_component( package, comp ); + if (!component) + { + WARN("service component not found\n"); + goto done; + } + if (!component->Enabled) + { + TRACE("service component disabled\n"); + goto done; + } hscm = OpenSCManagerW(NULL, SERVICES_ACTIVE_DATABASEW, GENERIC_WRITE); if (!hscm) { @@ -5969,10 +5979,6 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param) goto done; }
- comp = MSI_RecordGetString( rec, 12 ); - if (!get_loaded_component( package, comp )) - goto done; - start_type = MSI_RecordGetInteger(rec, 5); if (start_type == SERVICE_BOOT_START || start_type == SERVICE_SYSTEM_START) goto done; @@ -5992,11 +5998,10 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param) row = MSI_QueryGetRecord(package->db, query, comp); if (!row) { - ERR("Control query failed!\n"); + ERR("Query failed\n"); goto done; } key = MSI_RecordGetString(row, 6); - file = get_loaded_file(package, key); msiobj_release(&row->hdr); if (!file)