diff --git a/dll/win32/msi/package.c b/dll/win32/msi/package.c index 5aa3dd0e12..f65e2eea4c 100644 --- a/dll/win32/msi/package.c +++ b/dll/win32/msi/package.c @@ -1498,6 +1498,8 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage) r = get_local_package( file, localfile ); if (r != ERROR_SUCCESS || GetFileAttributesW( localfile ) == INVALID_FILE_ATTRIBUTES) { + DWORD localfile_attr; + r = msi_create_empty_local_file( localfile, dotmsi ); if (r != ERROR_SUCCESS) { @@ -1514,6 +1516,11 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage) return r; } delete_on_close = TRUE; + + /* Remove read-only bit, we are opening it with write access in MSI_OpenDatabaseW below. */ + localfile_attr = GetFileAttributesW( localfile ); + if (localfile_attr & FILE_ATTRIBUTE_READONLY) + SetFileAttributesW( localfile, localfile_attr & ~FILE_ATTRIBUTE_READONLY); } TRACE("opening package %s\n", debugstr_w( localfile )); r = MSI_OpenDatabaseW( localfile, MSIDBOPEN_TRANSACT, &db );