Многие из наших exe динамически загружают B.dll. B.dll делает копию себя во временном файле и перезагружает% TMP% \ B-.dll. Я пытаюсь использовать этот код, чтобы пометить B-.dll для удаления, но он терпит неудачу с «доступ запрещен», без сомнения из-за вызова LoadLibrary:
char ourDllPath[MAX_PATH];
// ... set ourDllPath to absolute path...
char tempPath[MAX_PATH];
DWORD dwRetVal = GetTempPath(MAX_PATH, tempPath);
char shadowPath[MAX_PATH];
UINT uRetVal = GetTempFileNameA(tempPath, "FOO_", 0, shadowPath);
BOOL ok = CopyFileA(ourDllPath, shadowPath, false);
HMODULE hShadowDll = LoadLibraryA(shadowPath);
typedef int (WINAPI *PRESUMEFOO)();
PRESUMEFOO onload2 = (PRESUMEFOO)GetProcAddress(hShadowDll,"_Resume_Foo@0");
BOOL ok2 = DeleteFileA(shadowPath); // Fails with "Access is denied"
Однако, согласно здесь (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363915(v=vs.85).aspx) это должно быть возможно:
«Функция DeleteFile помечает файл для удаления при закрытии. Поэтому удаление файла не происходит до тех пор, пока последний дескриптор файла не будет закрыт».
Любые идеи о том, как я могу пометить текущий открытый файл, который будет удален при закрытии на ОС Windows Server?
Задача ещё не решена.