0

如果可能,我的 Qt/C++/Windows 程序需要能够在不调用 UAC 的情况下删除一些文件。

因此,我正在检查是否可以在没有 UAC 的情况下编写文件,并且令人惊讶的是(在 Linux 上不是这种情况),以下行:

if (QFileInfo(targetPath + "/" + applicationFileName).isWritable()
 && QFileInfo(targetPath + "/").isWritable()) {

在没有 UAC 验证的情况下运行时返回 true,但是.. 它仍然失败,并且 Process Monitor 声称:

Date & Time:    5/9/2012 9:09:16 AM
Event Class:    File System
Operation:  CreateFile
Result: ACCESS DENIED
Path:   C:\Program Files (x86)\MyApp\MyApp.exe
TID:    4540
Duration:   0.0000278
Desired Access: Delete
Disposition:    Open
Options:    Non-Directory File, Open Reparse Point
Attributes: n/a
ShareMode:  Read, Write, Delete
AllocationSize: n/a

当以管理员身份调用时,它可以完美运行..

有任何想法吗?

4

1 回答 1

2

根据QFileInfo 文档,默认情况下在 Windows 上不检查权限,您可以启用/禁用检查:

qt_ntfs_permission_lookup++; // turn checking on
bool isWritable = QFileInfo(targetPath + "/" + applicationFileName).isWritable()
                  && QFileInfo(targetPath + "/").isWritable();
qt_ntfs_permission_lookup--; // turn it off again
于 2012-05-10T02:21:35.527 回答