我看到这样四种方法:
基于此评论:
Windows有
AccessCheck
函数,您可以使用它来检查文件是否具有FILE_GENERIC_EXECUTE
权限。首先,您需要调用OpenThreadToken
(或者如果失败,则使用OpenProcessToken
和DuplicateToken
)获取模拟令牌,然后使用GetNamedSecurityInfoW
获取文件安全性(所有者、标签、属性和 DACL )。
我发现了一个 Go 的包含函数 UserHasPermission。我认为这是正确的方法。
被 PHP 和 Rust 使用。它检查文件是否为可执行 类型,但不检查可执行 权限。
被 Go、Python 和 Nim 使用。该逻辑是所有文件都可读和可执行,并且只区分文件是否可写。
被 Ruby 使用。该逻辑是所有文件都可读和可执行,并且只区分文件是否可写。
CreateProcessW
运行文件,或者通过语言包装Windows API,并通过搜索不同的文件来处理访问被拒绝的错误,记录日志或提示用户。 - Eryk Sunfaccessat
与X_OK
和AT_EACCESS
,以便将文件的模式和 ACL 权限与进程的有效用户 ID、组 ID 和附加组进行评估。Windows 可以使用AccessCheck
来检查是否有FILE_GENERIC_EXECUTE
访问权限。首先,您需要调用OpenThreadToken
(或者如果失败了,则是OpenProcessToken
和DuplicateToken)以获取模拟令牌,并使用
GetNamedSecurityInfoW`获取文件安全信息(所有者、标签、属性和 DACL)。 - Eryk Sun