Удаление теневой копии DLL из временного каталога

Многие из наших 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?

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]