0

私の Qt/C++/Windows プログラムは、可能であれば、UAC を呼び出さずにいくつかのファイルを削除できる必要があります。

そのため、ファイルが UAC なしで書き込めるかどうかを確認していますが、驚くべきことに (Linux ではそうではありません)、次の行です。

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

UAC検証なしで実行するとtrueを返しますが、それでも失敗し、プロセスモニターは次のように主張します:

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 documentationによると、権限は 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 に答える