delphi - Windows 在哪里存储 INI 文件的替代文件 (Delphi 7)

标签 delphi registry

我通常使用保存在应用程序自己的文件夹中的 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/

相关文章:

class - 如何从记录常量数组中引用类?

delphi - Delphi对象检查器如何灰色化某些属性?

Java 错误打开注册表项

docker - 从 Private Docker Registry 中删除图像的方法

registry - 使用 regsvr32.exe 注册 OCX 并使其可供所有用户使用

c++ - 如何确定正在使用的图形卡 (Win32)

delphi - 如何在Delphi 2010中设置待办事项列表类别

delphi - AttachConsole 和 64 位应用程序

Delphi Xe2 VCL 样式和网络浏览器

powershell - Powershell命令查找注册表项高级审核设置(权限)