我有一个从文件“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位上。
发布于 2017-08-07 22:20:55
诊断是EXE程序执行声明自己与UAC兼容的不包含舱单。对于仍然使用GetPrivateProfileString()的应用程序来说,这并不少见。
应该是这样的吗?
是的,这就是Windows的现代版本(主要版本>= 6、Vista和up)处理那些假定用户始终拥有管理权限的遗留程序的方式。将文件访问重定向到VirtualStore目录可以确保缺少对Program目录的访问权限不会造成麻烦。
它只会读出来
操作系统没有时间机器来猜测是否可以写入文件,并在上一次会话中这样做。所以它必须首先检查VirtualStore目录。找到那个.ini文件。
同样重要的是,而不是假设是您的程序在该目录中获得了.ini文件。它可能是由另一个古老的程序完成的,比如文本编辑器。或者你的程序的前一个版本。或者你使用的安装程序。
发布于 2017-08-07 21:02:53
是的,因为程序会崩溃,所以Windows将程序重定向到VirtualStore目录。
https://stackoverflow.com/questions/45434775
复制相似问题