我想在卸载过程中使用它来警告用户。该过程应该适用于 W2000+,因此不允许使用 Vista API。
这似乎抓住了一些冲突:
if( GetFileAttributes( lpPath ) == INVALID_FILE_ATTRIBUTES )
{
// File does not exist
}
else
{
BOOL bCanDelete = FALSE ;
HANDLE hFile = CreateFile( path,
GENERIC_WRITE /*|DELETE*/,
0 /*FILE_SHARE_DELETE*/,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if( hFile != INVALID_HANDLE_VALUE )
{
DWORD size = 10000 ; // a number > file size allowed
if( size != INVALID_FILE_SIZE )
{
if( LockFile( hFile, 0,0, size,0) )
{
UnlockFile( hFile, 0,0, size,0) ;
bCanDelete = TRUE ;
}
}
CloseHandle( hFile ) ;
}
}
即它检测到以下情况:a)删除正在运行的 exe 文件 b)删除打开的 pdf
使用 GENERIC_WRITE|DELETE 似乎表现类似。单独使用 DELETE 适用于情况 b),但不适用于 a)。
我没有确凿的证据表明 LockFile() 捕捉到任何有意义的冲突,但假设它确实存在。
有人有更好的主意吗?