首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetPrivateProfileString和AppData VirtualStore目录

GetPrivateProfileString和AppData VirtualStore目录
EN

Stack Overflow用户
提问于 2017-08-01 10:00:33
回答 2查看 637关注 0票数 0

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

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

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

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

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

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

谷歌使用虚拟商店似乎是因为我的用户对c:\程序文件(x86)没有完全的权限。但是,程序本身并不写入ini文件,它只从它读取。

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

我在Windows 10 64位上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-07 22:20:55

诊断是EXE程序执行声明自己与UAC兼容的不包含舱单。对于仍然使用GetPrivateProfileString()的应用程序来说,这并不少见。

应该是这样的吗?

是的,这就是Windows的现代版本(主要版本>= 6、Vista和up)处理那些假定用户始终拥有管理权限的遗留程序的方式。将文件访问重定向到VirtualStore目录可以确保缺少对Program目录的访问权限不会造成麻烦。

它只会读出来

操作系统没有时间机器来猜测是否可以写入文件,并在上一次会话中这样做。所以它必须首先检查VirtualStore目录。找到那个.ini文件。

同样重要的是,而不是假设是您的程序在该目录中获得了.ini文件。它可能是由另一个古老的程序完成的,比如文本编辑器。或者你的程序的前一个版本。或者你使用的安装程序。

票数 2
EN

Stack Overflow用户

发布于 2017-08-07 21:02:53

是的,因为程序会崩溃,所以Windows将程序重定向到VirtualStore目录。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45434775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档