https://git.reactos.org/?p=reactos.git;a=commitdiff;h=63bb43adbb83f47df121d…
commit 63bb43adbb83f47df121d00e7578490bf59b5c01
Author: Jérôme Gardou <jerome.gardou(a)reactos.org>
AuthorDate: Fri Feb 12 14:46:56 2021 +0100
Commit: Stanislav Motylkov <x86corez(a)gmail.com>
CommitDate: Sat Dec 18 15:44:04 2021 +0300
[MSI] Remove read-only bit when copying the package file
CopyFileW also copies the file attributes, and the copy will be opened with
write access later on.
This is import of Wine commit:
https://source.winehq.org/git/wine.git/commit/e830975806df9ef283c89f7153b06…
Fixes MS Office 2000/2003 installers and probably others. CORE-17693
---
dll/win32/msi/package.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/dll/win32/msi/package.c b/dll/win32/msi/package.c
index 5aa3dd0e128..f65e2eea4cf 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 );