gpt4 book ai didi

windows - 为什么我的 Qt 应用程序即使在非管理员访问权限下也会写入 protected 位置?

转载 作者:可可西里 更新时间:2023-11-01 11:28:24 26 4
gpt4 key购买 nike

我在 Windows 上使用 Qt 5.4。我遇到了一个奇怪的问题。我试图在非管理员用户访问级别下将文件写入程序文件目录。我预计它不会写。但是写了!完全没有错误。好的,但真正奇怪的是,只有我的程序可以“看到”该文件,但资源管理器没有显示它,当我尝试 dirdir/ah 时它也没有显示> 或 ls

这是资源管理器可以看到的This is what explorer can see

这是我的程序可以看到的This is what my program can see 请注意,每次我启动程序并浏览到该文件夹​​时,我的程序都可以看到该文件。

这到底是怎么回事?

最佳答案

为什么会这样?

文件虚拟化。文件虚拟化是 Windows Vista+ 操作系统用来解决应用程序想要写入只能由管理员写入的位置(如 C:\Program FilesC:\Windows )的情况的技术。

当应用程序写入此类系统位置时,Windows 会将所有此类文件操作重定向到位于 %LOCALAPPDATA%\VirtualStore 的虚拟存储目录。稍后,当应用程序读回该文件时,计算机将在虚拟存储中提供该文件。这样 Windows 就可以“愚弄”程序,使其相信它从 protected 位置读取和写入,而实际上它只处理虚拟位置。

如何解决这个“问题”?

list 。

list 是一个可以嵌入到应用程序中的 XML 文件。它告诉 Windows 该应用程序是 UAC 感知的,因此它不应该进行任何文件虚拟化。所以,现在如果应用程序试图访问 protected 资源,那么这些操作将简单地失败,但操作系统不会虚拟化。当您的应用程序包含指定了 requestedExecutionLevel 值的应用程序 list 时,Windows 的注册表和文件系统虚拟化将被关闭。

示例 list 文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

实际做什么?

有几种不同的方法可以将 list 文件添加到 Qt 应用程序。我只会提到一个——我觉得这是最简单的。如果您知道,可以将其他方式添加到此答案中。

  1. 创建 list 文件(您甚至可以使用上面给出的文件)。
  2. 确保存在 requestedExecutionLevel 标记(否则虚拟化不会关闭)。
  3. 执行 mt.exe -nologo -manifest <your manifest file> -outputresource:<your executable>;#1 *
  4. 完成。

*我在 mt.exe 中找到了 "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ 文件,它对你来说可能略有不同,但它肯定在 Microsoft SDKs\Windows 文件夹中


来源
<子>1。 Qt cannot cannot create/write to C:\
<子>2。 http://msdn.microsoft.com/en-us/library/bb756960.aspx
<子>3。 http://blog.strixcode.com/2010/08/embedding-application-manifest-and.html
<子>4。 http://qt-project.org/forums/viewthread/36726

关于windows - 为什么我的 Qt 应用程序即使在非管理员访问权限下也会写入 protected 位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28019093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com