msi: Only load the features and files tables once.
This commit is contained in:
parent
0260b26962
commit
9a9195d6e4
@ -1315,6 +1315,9 @@ static UINT load_all_files(MSIPACKAGE *package)
|
|||||||
'`','F','i','l','e','`',' ', 'O','R','D','E','R',' ','B','Y',' ',
|
'`','F','i','l','e','`',' ', 'O','R','D','E','R',' ','B','Y',' ',
|
||||||
'`','S','e','q','u','e','n','c','e','`', 0};
|
'`','S','e','q','u','e','n','c','e','`', 0};
|
||||||
|
|
||||||
|
if (!list_empty(&package->files))
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
|
||||||
rc = MSI_DatabaseOpenViewW(package->db, Query, &view);
|
rc = MSI_DatabaseOpenViewW(package->db, Query, &view);
|
||||||
if (rc != ERROR_SUCCESS)
|
if (rc != ERROR_SUCCESS)
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
@ -1327,16 +1330,16 @@ static UINT load_all_files(MSIPACKAGE *package)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I am not doing any of the costing functionality yet.
|
* I am not doing any of the costing functionality yet.
|
||||||
* Mostly looking at doing the Component and Feature loading
|
* Mostly looking at doing the Component and Feature loading
|
||||||
*
|
*
|
||||||
* The native MSI does A LOT of modification to tables here. Mostly adding
|
* The native MSI does A LOT of modification to tables here. Mostly adding
|
||||||
* a lot of temporary columns to the Feature and Component tables.
|
* a lot of temporary columns to the Feature and Component tables.
|
||||||
*
|
*
|
||||||
* note: Native msi also tracks the short filename. But I am only going to
|
* note: Native msi also tracks the short filename. But I am only going to
|
||||||
* track the long ones. Also looking at this directory table
|
* track the long ones. Also looking at this directory table
|
||||||
* it appears that the directory table does not get the parents
|
* it appears that the directory table does not get the parents
|
||||||
* resolved base on property only based on their entries in the
|
* resolved base on property only based on their entries in the
|
||||||
* directory table.
|
* directory table.
|
||||||
*/
|
*/
|
||||||
static UINT ACTION_CostInitialize(MSIPACKAGE *package)
|
static UINT ACTION_CostInitialize(MSIPACKAGE *package)
|
||||||
@ -1353,7 +1356,7 @@ static UINT ACTION_CostInitialize(MSIPACKAGE *package)
|
|||||||
|
|
||||||
if ( 1 == msi_get_property_int( package, szCosting, 0 ) )
|
if ( 1 == msi_get_property_int( package, szCosting, 0 ) )
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
|
|
||||||
MSI_SetPropertyW(package, szCosting, szZero);
|
MSI_SetPropertyW(package, szCosting, szZero);
|
||||||
MSI_SetPropertyW(package, cszRootDrive , c_colon);
|
MSI_SetPropertyW(package, cszRootDrive , c_colon);
|
||||||
|
|
||||||
@ -1361,8 +1364,11 @@ static UINT ACTION_CostInitialize(MSIPACKAGE *package)
|
|||||||
if (rc != ERROR_SUCCESS)
|
if (rc != ERROR_SUCCESS)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
rc = MSI_IterateRecords(view, NULL, load_feature, package);
|
if (list_empty(&package->features))
|
||||||
msiobj_release(&view->hdr);
|
{
|
||||||
|
rc = MSI_IterateRecords(view, NULL, load_feature, package);
|
||||||
|
msiobj_release(&view->hdr);
|
||||||
|
}
|
||||||
|
|
||||||
load_all_files(package);
|
load_all_files(package);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user