我通常使用保存在应用程序自己的文件夹中的 INI 文件来编写 Delphi 应用程序:
ConfigFile:= ChangeFileExt(ParamStr(0), '.ini');
IniFile:= TIniFile.Create(ConfigFile);
try
with IniFile do
begin
// etc
但是,我正在编写一个特定的应用程序,我想使用安装向导 (Inno),并让用户有机会在 Program Files (x86)\MyProg 中安装该应用程序。
对我来说新奇的是 Windows 不会将 INI 文件保存在安装目录中,而是保存在“其他地方”。
通过控制面板卸载应用程序会成功删除 Program Files (x86) 文件夹(包括该文件夹)中的所有项目,但与许多程序一样,如果重新安装,所有配置设置都会恢复。因此它们必须存储在控制面板 |卸载不会删除。
所以我的问题是在哪里?
谢谢, 约翰。
最佳答案
非管理员用户禁止在 Program Files
文件夹下写入文件。如果以非管理员用户身份运行的应用尝试在此处写入文件,并且该应用没有 UAC list ,则 Windows 会保护 Program Files
文件夹,并静默重定向对 VirtualStore 文件夹的所有访问在用户的个人资料中。
Common file and registry virtualization issues in Windows Vista or in Windows 7
Windows 7 Application Compatibility Issues …Demystified !!!
在这种情况下,当您将 INI 写入此文件时:
C:\Program Files (x86)\MyProg\MyProg.ini
它实际上被写入这个文件:
%USERPROFILE%\AppData\Local\VirtualStore\Program Files (x86)\MyProg\MyProg.ini
您应该更改应用程序以将 INI 文件存储在更合适的位置,例如:
%LOCALAPPDATA%\MyProg\MyProg.ini
或者:
%PROGRAMDATA%\MyProg\MyProg.ini
Where Should I Store my Data and Configuration Files if I Target Multiple OS Versions?
关于delphi - Windows 在哪里存储 INI 文件的替代文件 (Delphi 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276360/