gpt4 book ai didi

c - GetPrivateProfileString 和 AppData VirtualStore 目录

转载 作者:行者123 更新时间:2023-11-30 19:33:29 24 4
gpt4 key购买 nike

我有一个程序,它从文件“.\abcd.ini”读取GetPrivateProfileString - 即它将在当前目录中查找ini 文件。如果找不到 ini 文件,则会在第三个参数中将默认值设置为 GetPrivateProfileString

我有一个安装程序,它将程序安装到 c:\program files (x86)\abcd\client 目录。

最初,安装程序还在同一目录中安装了一个 abcd.ini 文件,其中包含特定的配置文件字符串键/值对。之后,我更改了安装程序以不安装任何 ini 文件。

但是,程序继续从我提供的旧 ini 文件中获取值,即使该目录中不存在该值。

在进行系统范围的搜索后,我在c:\Users\myusername\AppData\Local\VirtualStore\Program Files (x86)\abcd\Client中找到了 abcd.ini 的副本

一旦我删除了这个,程序就可以正常工作(就像没有ini文件一样)。

谷歌搜索似乎使用了虚拟存储,因为 myuser 没有 c:\program files (x86) 的完全权限。但是,程序本身不会写入 ini 文件,而只会从中读取。

这实际上是应该的吗?为什么 ini 文件被复制到 AppData,如果没有本地副本,为什么程序要从那里读取?

我使用的是 Windows 10 64 位。

最佳答案

诊断结果是 EXE 程序执行 not contain a manifest声明自己与 UAC 兼容。对于仍然使用 GetPrivateProfileString() 的应用程序来说,这并不罕见。

Is this actually how it's supposed to be?

是的,这是现代版本的 Windows(主要版本 >= 6、Vista 及更高版本)处理假定用户始终具有管理员权限的旧程序的方式。将文件访问重定向到 VirtualStore 目录可确保缺少对 Program Files 目录的访问权限不会造成问题。

it only reads from it

操作系统没有时间机器来猜测您是否可能写入文件并在上一个 session 中这样做。因此它必须首先检查 VirtualStore 目录。找到该 .ini 文件。

同样重要的是,不要假设是您的程序在该目录中获取了 .ini 文件。它可以通过另一个古老的程序来完成,例如文本编辑器。或者您的程序的先前版本。或者您使用的安装程序。

关于c - GetPrivateProfileString 和 AppData VirtualStore 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45434775/

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