Use FILE_SHARE_DELETE when loading modules, as running an exe that's
going to be deleted should work.
diff --git a/dlls/kernel/process.c b/dlls/kernel/process.c
index a9e33e7..4541278 100644
--- a/dlls/kernel/process.c
+++ b/dlls/kernel/process.c
@@ -195,7 +195,7 @@
TRACE("looking for %s\n", debugstr_w(name) );
- if ((handle = CreateFileW( name, GENERIC_READ, FILE_SHARE_READ,
+ if ((handle = CreateFileW( name, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING, 0, 0 )) == INVALID_HANDLE_VALUE)
{
/* file doesn't exist, check for builtin */
@@ -260,7 +260,7 @@
if (SearchPathW( NULL, name, NULL, buflen, buffer, NULL ))
{
TRACE( "Trying native/Unix binary %s\n", debugstr_w(buffer) );
- if ((*handle = CreateFileW( buffer, GENERIC_READ, FILE_SHARE_READ,
+ if ((*handle = CreateFileW( buffer, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING, 0, 0 )) != INVALID_HANDLE_VALUE)
return TRUE;
}
@@ -276,7 +276,7 @@
{
case LOADORDER_DLL:
TRACE( "Trying native exe %s\n", debugstr_w(buffer) );
- if ((*handle = CreateFileW( buffer, GENERIC_READ, FILE_SHARE_READ,
+ if ((*handle = CreateFileW( buffer, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING, 0, 0 )) != INVALID_HANDLE_VALUE)
return TRUE;
if (GetLastError() != ERROR_FILE_NOT_FOUND) return TRUE;