2017-08-01 89 views
-1

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

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

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

但是,该程序继续从旧的ini文件中获取该值,即使该文件不存在于该目录中,该值也已发送。

做了系统范围的搜索后,我发现abcd.ini的副本c:\Users\myusername\AppData\Local\VirtualStore\Program Files (x86)\abcd\Client

一旦我删除了这一点,该程序工作正常(因为如果没有ini文件)。

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

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

我在Windows 10 64位。

+0

评论不适用于扩展讨论;这个对话已经[转移到聊天](http://chat.stackoverflow。COM /间/ 150849 /讨论上个问题按user93353-getprivateprofilestring-和应用程序数据虚函数)。 – meagar

+0

如果要禁用VirtualStore,请添加清单文件。有关更多信息,请参阅https://stackoverflow.com/a/4730128/1983398。 – ssbssa

回答

2

诊断是EXE程序确实声明了自己与UAC兼容的not contain a manifest。对于仍然使用GetPrivateProfileString()的应用程序,这种情况并不少见。

这实际上应该是这样吗?

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

只读取它

操作系统没有时光机去猜测你是否威力写入文件,并在前一交易日这样做了。所以它必须先检查VirtualStore目录。找到.ini文件。

这对而不是也很重要,假设它是您的程序在该目录中获得.ini文件。它本来可以由另一个古老的程序完成,如文本编辑器。或者您的程序的以前版本。或者您使用的安装程序。

-2

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

+0

为什么程序会崩溃? – user93353

相关问题