GetPrivateProfileString 和 AppData VirtualStore 目录
GetPrivateProfileString and AppData VirtualStore directory
我有一个从文件“.\abcd.ini”中读取 GetPrivateProfileString
的程序 - 即它将在当前目录中查找 ini 文件。
如果它没有找到 ini 文件,它在第三个参数中将默认值设置为 GetPrivateProfileString
.
我有一个安装程序可以将程序安装到 c:\program files (x86)\abcd\client
目录。
最初,安装程序还在具有特定配置文件字符串 key/value 对的同一目录中安装了一个 abcd.ini 文件。 Post 那,我更改了安装程序以不安装任何 ini 文件。
但是,程序继续从我提供的旧 ini 文件中获取值,即使该目录中不存在它也是如此。
在进行全系统搜索后,我在 c:\Users\myusername\AppData\Local\VirtualStore\Program Files (x86)\abcd\Client
中找到了一份 abcd.ini
一旦我删除它,程序就可以正常工作了(就像没有 ini 文件一样)。
Google 似乎使用了 virtualstore,因为 myuser 没有 c:\program files (x86) 的完全权限。但是,程序本身不会写入 ini 文件,它只会从中读取。
这真的应该是这样吗?为什么要将 ini 文件复制到 AppData?如果没有本地副本,为什么程序会从那里读取?
我在 Windows 10 64 位。
是的,因为程序会崩溃,所以Windows将程序重定向到VirtualStore目录。
诊断是 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
OS 没有时间机器来猜测您是否可能 写入文件并且在之前的会话中这样做过。所以它必须首先检查 VirtualStore 目录。找到那个 .ini 文件。
同样重要的是,不要假设是您的程序在该目录中获取了 .ini 文件。它可能是由另一个古老的程序完成的,比如文本编辑器。或者你的程序的以前版本。或者您使用的安装程序。
我有一个从文件“.\abcd.ini”中读取 GetPrivateProfileString
的程序 - 即它将在当前目录中查找 ini 文件。
如果它没有找到 ini 文件,它在第三个参数中将默认值设置为 GetPrivateProfileString
.
我有一个安装程序可以将程序安装到 c:\program files (x86)\abcd\client
目录。
最初,安装程序还在具有特定配置文件字符串 key/value 对的同一目录中安装了一个 abcd.ini 文件。 Post 那,我更改了安装程序以不安装任何 ini 文件。
但是,程序继续从我提供的旧 ini 文件中获取值,即使该目录中不存在它也是如此。
在进行全系统搜索后,我在 c:\Users\myusername\AppData\Local\VirtualStore\Program Files (x86)\abcd\Client
一旦我删除它,程序就可以正常工作了(就像没有 ini 文件一样)。
Google 似乎使用了 virtualstore,因为 myuser 没有 c:\program files (x86) 的完全权限。但是,程序本身不会写入 ini 文件,它只会从中读取。
这真的应该是这样吗?为什么要将 ini 文件复制到 AppData?如果没有本地副本,为什么程序会从那里读取?
我在 Windows 10 64 位。
是的,因为程序会崩溃,所以Windows将程序重定向到VirtualStore目录。
诊断是 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
OS 没有时间机器来猜测您是否可能 写入文件并且在之前的会话中这样做过。所以它必须首先检查 VirtualStore 目录。找到那个 .ini 文件。
同样重要的是,不要假设是您的程序在该目录中获取了 .ini 文件。它可能是由另一个古老的程序完成的,比如文本编辑器。或者你的程序的以前版本。或者您使用的安装程序。