是什么原因导致此错误“无法写入应用程序 file.ini”

2023-12-08

我的应用程序是用delphi构建的,它可以在除Windows 7 64位机器之外的其他平台上完美运行。每次尝试关闭应用程序都会给我这个错误 “无法写入应用程序文件.ini”

这是我的关闭代码

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
      frmMain.close;
end;

此错误通常是由于尝试写入应用程序自己的文件夹而引起的Program Files,对于 Vista 及更高版本(以及 XP,如果您不以管理员或高级用户身份运行)下的非管理员来说,这是不允许的。

以下是获取 .INI 文件正确文件夹的一些代码:

uses
  Windows,
  ShlObj;   // For SHGetSpecialFolderPath

function GetFolderLocation(Handle: HWnd; Folder: Integer): string;
begin
  Result := '';
  SetLength(Result, MAX_PATH);
  if not SHGetSpecialFolderPath(Handle, PChar(Result), Folder, False) then
    RaiseLastOSError;
end;

我在应用程序中使用这些来检索非漫游配置文件文件夹,并使用在该文件夹下创建的子文件夹来保存应用程序的数据。它是在创建时设置的TDataModule:

procedure TAppData.Create(Sender.TObject);
begin
  // DataPath is a property of the datamodule, declared as a string
  // CSIDL_LOCAL_APPDATA is the local non-roaming profile folder.
  // CSIDL_APPDATA is for the local roaming profile folder, and is more typically used
  DataPath := GetFolderLocation(Application.Handle, CSIDL_LOCAL_APPDATA);
  DataPath := IncludeTrailingPathDelimiter(DataPath) + 'MyApp\';
end;

See MSDN 的文档页面关于各种含义CSIDL_ or FOLDERID_价值观。这FOLDERID_值类似,但仅在 Vista 及更高版本上可用,并与SHGetKnownFolderIDList.

对于你们这些人not愿意无视 MS 的警告SHGetSpecialFolderPath不受支持,这是一个替代版本GetFolderLocation using SHGetFolderPath,这是首选:

uses
  ShlObj, SHFolder, ActiveX, Windows;

function GetFolderLocation(Handle: HWnd; Folder: Integer): string;
begin
  Result := '';
  SetLength(Result, MAX_PATH);
  if not Succeeded(SHGetFolderPath(Handle, Folder, 0, 0, PChar(Result))) then
      RaiseLastOSError();
end;

最后,对于那些只使用 Vista 及更高版本的人,这里有一个使用的示例SH获取已知文件夹路径- 请注意,这在 Delphi 的 XE 之前版本中不可用(据我所知,可能是 2009 年或 2010 年),您需要使用已知文件夹ID值而不是CSIDL_, like FOLDERID_LocalAppData:

uses
  ShlObj, ActiveX, KnownFolders;

// Tested on XE2, VCL forms application, Win32 target, on Win7 64-bit Pro
function GetFolderLocation(const Folder: TGuid): string;
var
  Buf: PWideChar;
begin
  Result := '';
  if Succeeded(SHGetKnownFolderPath(Folder, 0, 0, Buf)) then
  begin
    Result := Buf;
    CoTaskMemFree(Buf);
  end
  else
    RaiseLastOSError();
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是什么原因导致此错误“无法写入应用程序 file.ini” 的相关文章

  • 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

    如果 TVirtualStringTree 获得焦点 则默认情况下它会在鼠标滚轮上滚动 即使鼠标未超出控制范围 除非它位于另一个 TVirtualStringTree 上方 有没有一种快速而优雅的方法来禁用这种行为 我已经这样做了OnMou
  • 创建FileStream时如何处理异常

    我有一个这样的函数 我想重构它 function Myfunction sUrl sFile String Boolean var GetData TFileStream begin Result False if the line bel
  • vcl组合框并不总是显示它有焦点

    当我从另一个控件切换到组合框时 它会显示文本周围带有虚线的框 但是当我以编程方式将控件设置为活动状态时 它不会显示相同的焦点指示器 这种行为有解决方法吗 我有德尔福XE6 MCVE unit Unit27 interface uses Wi
  • 如何更改 Chromium 组件的默认背景颜色?

    I use TChromium http code google com p delphichromiumembedded 我分配AWebPageAsString这是一个带有灰色背景颜色的静态 HTML 页面 FBrowser TChrom
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • 如何更新Delphi对象检查器?

    继我最近发布的这个问题之后 组件编辑器可以在多个组件上执行吗 https stackoverflow com questions 14802371 can a component editor be executed on multiple
  • 如何将我的图标添加到组件选项板页面中的组件? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi非可视化组件图像 https stackoverflow com questions 3319276 delphi non visual component image 如何将我的图标添加
  • VCL.位图到 FMX.位图

    我在网上找到了这段代码 但 FMX Bitmap 没有扫描线 是否可以以某种方式将 VCL TBitmap 复制或绘制到 FMX Bitmap IFDEF MSWINDOWS type TBitmap FMX Types TBitmap T
  • 如何在 OSX 上的应用程序名称下创建子项菜单?

    如何在下面添加TMenuItemProject1以上Quit在下面的屏幕截图上 我创建了一个 TMenuBar 并选中了 UseOSMenu 属性 我添加的第一个 TMenuItem 是主栏中的第二个 TMenuItem 您可以通过将 II
  • 获取 TransactSql 批处理中的语句数计数

    对于不使用 Delphi 的读者 虽然以下内容是根据 Delphi 编码来表达的 但我的实际技术问题不是特定于 Delphi 的 而是关于如何找出 Sql Server 如何 理解 TransactSql 批处理提交给它 TAdoQuery
  • 如何避免使用 WinApi.Windows 的 Delphi 应用程序中的 dll 劫持

    Delphi 最新版本使用各种系统 dll 的静态链接 例如 WinApi Windows 单元中的 version dll 这会导致在单元初始化之前加载 version dll 这会打开一个安全漏洞 可以通过将受感染的 version d
  • 在运行时按需更改组件类

    我的问题与这里的想法类似 替换delphi中的组件类 https stackoverflow com q 4685863 937125 但我需要改变一个specific按需组件类 这是一些伪演示代码 unit Unit1 TForm1 cl
  • 当显示对话框时淡出应用程序的所有其他窗口?

    如何在 Delphi 2009 中调暗 淡出应用程序的所有其他窗口 Form 有一个 AlphaBlend 属性 但它仅控制透明度级别 但如果我们能有这样的东西那就太好了 集中窗口 http www anappaday com downlo
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 为什么未初始化的指针会导致内存访问冲突接近 0?

    据说often 但并非总是如此 当你在接近于零的内存位置 比如 89 美元 获得 AV 时 你就有了一个未初始化的指针 但我也在 Delphi 书籍中看到了这一点 嗯 或者它们都是由同一作者写的 Update 引自 Bob Swart 等人
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • Delphi AES 库 (Rijndael) 使用 KAT Vectors 进行测试

    对于这两个库 Delphi 加密概要 v 5 2 http code google com p delphidec TurboPower 密码箱 v 2 07 http lockbox seanbdurkin id au tiki list
  • 如何从 VCL.Graphics 获取所有已注册的文件格式...但 64 位

    在我的 32 位应用程序中 我使用FindRegisteredPictureFileFormats 单元由 Cosmin Prund 提供 https stackoverflow com a 14677532 505088 gt 如何从图形

随机推荐

  • DBase7 中的时间戳

    我正在尝试从 dbf 文件读取 DBase 7 时间戳值 从 DBase 格式规范我得到以下信息 8 个字节 两个长整型 第一个用于日期 第二个用于时间 该日期是自 01 01 4713 BC 以来的天数 时间为小时 3600000L 分钟
  • Java Firestore Android 在查询中使用数组列表来显示关注用户的帖子

    我正在开发一项活动 显示用户关注的用户的帖子 对于帖子 我使用了以下结构 root posts collection uid documents userPosts collection postId documents title Pos
  • Python OSError:SFTP 失败

    我正在 Windows 11 笔记本电脑上测试 SFTP 通信 SFTP 服务器在 localhost 3373 上运行 一个sftp get请求生成一个 操作系统错误 失败 此代码错误 import pysftp remotepath C
  • 即使我声明了 Main 方法也未找到

    我想创建一个带有 main 方法的简单 java 类 但是当我编译代码时 我收到以下错误消息 错误 在类错误中找不到主方法 TestErrors 请定义 主要方法为 public static void main String args 这
  • 多个数据库连接和 Yii 2.0

    我有两个数据库 每个数据库都有相同的表和相同的字段 但是如何同时从所有两个数据库中获取所有记录Yii 2 0 首先 您需要配置数据库 如下所示 return components gt db1 gt class gt yii db Conn
  • jqGrid 列选择器对话框可调整大小,但调整大小时内部内容不会在调整大小时拉伸

    我使用 jqGrid 和 ui multiselect js 进行列选择和重新排序 出现的对话框可以调整大小 但调整大小时 对话框的内容不会调整大小 你必须参加任何活动才能做这些事情吗 你是对的 目前 这是列选择器中的问题 最好在代码中进行
  • Android Volley:POST 请求 - NodeJS REST API 内的 req.body 为空

    我知道它已经被讨论了十亿次 而且我已经阅读了几个问题 答案 特别是这个似乎是一个很好的例子 gt example 所以现在我尝试重新创建代码并添加我的getParams 以及我的getHeaders 尴尬的是我得到了 HTTP 状态代码 4
  • 如何在php中获取选择框的多个选定值?

    我有一个 html 表单 其中有一个选择列表框 您可以从中选择多个值 因为它的 multiple 属性设置为 multiple 考虑表单方法是 GET 表单的html代码如下
  • 从父级中删除多个子级?

    我有一堆同名的元素 我试图用 onchange 函数同时删除它们 这是 JavaScript 甚至不确定removeChildren是否是一个真正的命令 我的元素是给onchange操作
  • 加载多个图像时回调的跨浏览器解决方案?

    我检查了其他问题 但它们都包含如何在加载一张特定图像时进行回调的信息 var img new Image img src images img png if img complete img onload function code to
  • 在android 3.0(蜂窝)中隐藏系统栏

    如何在android 3 0 honeycomb 中隐藏系统栏 无法删除系统栏 在未 root 的设备上 您可以进入 熄灯模式 该模式会将其变暗并仅显示按钮使用以下代码的点 ref View v findViewById R id view
  • 如何在 SQL 语句中组合 AND 和 OR

    我有这样的SQL语句 SELECT FROM table WHERE type 3 OR type 5 OR type 4 and table deleted 1 我读过可以使用括号来完成此操作 但我想知道这是否有效 SELECT FROM
  • 从不区分大小写的数组中删除重复值的最佳解决方案[重复]

    这个问题在这里已经有答案了 我找到了一些解决方案 但我无法决定使用哪一个 使用 php 的最紧凑 最有效的解决方案是什么array unique 函数在不区分大小写的数组上 Example input array green Green b
  • 如何在 Meteor 中存储日期和时间以进行范围查询?

    我的应用程序需要创建在浏览器中的 3 个不同时区中显示 startDate 的对象 日期还必须包括确切的时间 日期的存储方式应允许查询 提供 X 和 Y 之间的所有日期 并将其解析为 3 个时区 我的问题是我应该如何最好地保存 并随后检索
  • 修复 GCC 的 #includes <> (Code::Blocks)

    我正在使用一些为不同编译器 链接器编写的代码 它包括如下文件 include
  • 将图像从加载项导入图像管理器

    我们通过插件在 EA 中自动创建需求元素 但问题是我们无法将图像从目录导入到图像管理器并将超链接添加到需求元素注释 那么 企业架构师是否提供了任何API来将图像从目录导入到图像管理器并将超链接添加到需求元素注释中 EA 将图像存储在t im
  • Android 按钮有两个功能

    我需要一个具有两个功能的按钮 如果我点击它一次 它就会转到下一页 如果我按住该按钮 它将允许我编辑按钮上的文本 点击该按钮后可以转到下一页 但是如何实现第二个功能 该功能允许我在按住按钮时更改文本 有人知道吗 java代码 public c
  • Google Datastore 跨区域复制

    我们有一个在美国和欧盟托管的应用程序 为了获得出色的性能 我们将在两个位置托管一个数据存储实例 现在我们的问题是如何将数据从美国数据存储复制到欧盟数据存储 或者从技术角度来看 我们将数据存储在哪里并不重要 目前还没有多位置 GAE 应用程序
  • 如何在子视图中使用addChildViewController

    我想用addChildViewController in View 子视图数组的一个视图 但我不知道这一点 这是我的代码 for UIView subview in self view subviews if subview tag 1 C
  • 是什么原因导致此错误“无法写入应用程序 file.ini”

    我的应用程序是用delphi构建的 它可以在除Windows 7 64位机器之外的其他平台上完美运行 每次尝试关闭应用程序都会给我这个错误 无法写入应用程序文件 ini 这是我的关闭代码 procedure TfrmMain FormClo