我有一个文件名,我想通过c ++检查它是否可以在windows上执行。我找到了_access和_access_s,但它们只检查读/写。
我的问题是,当我下载一个bat文件时,windows会阻止它作为安全措施。当我运行我的程序并尝试执行它时,Windows会阻止我的程序并询问用户是否还要继续,因为该文件存在风险。我想通过在执行文件权限之前检查文件权限来避免这种情况。
答案 0 :(得分:2)
如果您使用的是基于Unix的操作系统,则Windows文件系统NTFS不会像您期望的那样支持可执行属性。
您在这里看到的是shell对添加到文件中的额外流做出反应。流是NTFS的一个特性。
Microsoft提供了一些示例代码,说明如何访问文件中的流:
对于从互联网下载的文件,微软浏览器(IE和Edge)添加一个名为" Zone.Identifier"的流,ShellExecute
和相关API在被要求执行时检查用于向用户显示安全提示的文件。
要清理文件以便不显示安全提示,则必须删除该流。
BOOL didDeleteZoneIdentifier = DeleteFile(TEXT("Path To Batch File.bat:Zone.Idenfier"));
if(!didDeleteZoneIdentifier){
int errorCode = GetLastError();
....