Commit 3c2e79e7 authored by Mike McCormack's avatar Mike McCormack Committed by Alexandre Julliard

msi: Defer package deletion until after the database is closed.

parent c88c0b45
...@@ -54,11 +54,10 @@ static void MSI_FreePackage( MSIOBJECTHDR *arg) ...@@ -54,11 +54,10 @@ static void MSI_FreePackage( MSIOBJECTHDR *arg)
if( package->dialog ) if( package->dialog )
msi_dialog_destroy( package->dialog ); msi_dialog_destroy( package->dialog );
ACTION_free_package_structures(package);
msi_free_properties( package );
msiobj_release( &package->db->hdr ); msiobj_release( &package->db->hdr );
ACTION_free_package_structures(package);
msi_free_properties( package );
} }
static UINT clone_properties( MSIPACKAGE *package ) static UINT clone_properties( MSIPACKAGE *package )
...@@ -548,15 +547,16 @@ LPCWSTR msi_download_file( LPCWSTR szUrl, LPWSTR filename ) ...@@ -548,15 +547,16 @@ LPCWSTR msi_download_file( LPCWSTR szUrl, LPWSTR filename )
UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage) UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
{ {
static const WCHAR OriginalDatabase[] =
{'O','r','i','g','i','n','a','l','D','a','t','a','b','a','s','e',0};
static const WCHAR Database[] = {'D','A','T','A','B','A','S','E',0};
MSIDATABASE *db = NULL; MSIDATABASE *db = NULL;
MSIPACKAGE *package; MSIPACKAGE *package;
MSIHANDLE handle; MSIHANDLE handle;
LPWSTR ptr, base_url = NULL; LPWSTR ptr, base_url = NULL;
UINT r; UINT r;
WCHAR temppath[MAX_PATH];
static const WCHAR OriginalDatabase[] = LPCWSTR file = szPackage;
{'O','r','i','g','i','n','a','l','D','a','t','a','b','a','s','e',0};
static const WCHAR Database[] = {'D','A','T','A','B','A','S','E',0};
TRACE("%s %p\n", debugstr_w(szPackage), pPackage); TRACE("%s %p\n", debugstr_w(szPackage), pPackage);
...@@ -569,9 +569,6 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage) ...@@ -569,9 +569,6 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
} }
else else
{ {
WCHAR temppath[MAX_PATH];
LPCWSTR file;
if ( UrlIsW( szPackage, URLIS_URL ) ) if ( UrlIsW( szPackage, URLIS_URL ) )
{ {
file = msi_download_file( szPackage, temppath ); file = msi_download_file( szPackage, temppath );
...@@ -587,14 +584,12 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage) ...@@ -587,14 +584,12 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
file = copy_package_to_temp( szPackage, temppath ); file = copy_package_to_temp( szPackage, temppath );
r = MSI_OpenDatabaseW( file, MSIDBOPEN_READONLY, &db ); r = MSI_OpenDatabaseW( file, MSIDBOPEN_READONLY, &db );
if (file != szPackage)
DeleteFileW( file );
if( r != ERROR_SUCCESS ) if( r != ERROR_SUCCESS )
{ {
if (GetLastError() == ERROR_FILE_NOT_FOUND) if (GetLastError() == ERROR_FILE_NOT_FOUND)
msi_ui_error( 4, MB_OK | MB_ICONWARNING ); msi_ui_error( 4, MB_OK | MB_ICONWARNING );
if (file != szPackage)
DeleteFileW( file );
return r; return r;
} }
...@@ -604,7 +599,14 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage) ...@@ -604,7 +599,14 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
msi_free( base_url ); msi_free( base_url );
msiobj_release( &db->hdr ); msiobj_release( &db->hdr );
if( !package ) if( !package )
{
if (file != szPackage)
DeleteFileW( file );
return ERROR_FUNCTION_FAILED; return ERROR_FUNCTION_FAILED;
}
if( file != szPackage )
track_tempfile( package, file );
if( szPackage[0] != '#' ) if( szPackage[0] != '#' )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment