无法修改 c:\windows 目录中的 .ini 文件

2023-12-02

我正在编写一个 C# Windows 应用程序来更新旧应用程序的 .ini 文件。我没有旧应用程序的源代码,因此无法对其进行修改。

旧版应用程序将设置存储在 C:\Windows 的 INI 文件中。该位置无法更改。

为了修改 INI 设置,我一直在使用这些 Windows 函数:

[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileString")]
private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);

[DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString")]
private static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);

上述函数似乎没有修改 INI 文件,但是随后对“GetPrivateProfileString”的调用显示了正确/修改的值。

此外,我什至尝试使用 System.IO 类直接写入 INI 文件。这似乎没有修改INI文件。

如果我尝试将文件复制到应用程序的目录然后写入 INI 设置,则会写入正确的值。如果我随后尝试将此修改后的文件复制回 C:\Windows,则原始 INI 文件似乎没有被修改。

似乎操作系统级别发生了某种类型的 INI 文件缓存?

如果我使用文本编辑器手动编辑 INI 文件,INI 文件就会更新。

正如其他论坛上的建议,我在编写 INI 设置后也尝试过此代码:

WritePrivateProfileString(null, null, null, filename);

我的问题是旧应用程序无法获取 INI 文件更改(即使在重新启动旧应用程序后)。


在 UAC 下,没有 UAC 清单的应用程序如果尝试执行 UAC 阻止的操作,则会受到虚拟化的影响。这将写入镜像位置而不是受保护位置。当您尝试读取时,如果镜像位置中有文件,您将获得该文件。通过这种方式,您的应用程序将可以运行,即使它的编写与当时的最佳实践相矛盾。

To find the mirror location, open a Windows explorer to the folder and look for a button in the toolbar that says Compatibility Files: UAC virtualization

也许这对您来说已经足够了 - 既然您知道在哪里查找,您就可以信任虚拟化,并且该应用程序将正常工作。如果没有,请考虑在应用程序上放置外部清单。很明显的一句话asInvoker将阻止虚拟化并且写入将失败。如果应用程序具有错误处理功能(例如回退到另一个位置),也许这很好。很明显的一句话requireAdministrator将阻止虚拟化并且写入将会成功。然而,UAC 同意可能会惹恼您的用户。

(顺便说一句,这张图片来自我的一篇博客文章,其中更多地讨论了虚拟化。http://www.gregcons.com/KateBlog/FindingFilesYoureSureYouWrote.aspx)

我发现在许多应用程序中,以管理员身份运行一次即可将我的设置到位,之后我可以在不提升的情况下运行。在这种情况下,训练您的用户右键单击,以管理员身份运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法修改 c:\windows 目录中的 .ini 文件 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 以编程方式启用 Internet 连接共享

    我可以手动执行此操作 方法是右键单击网络连接 打开 共享 选项卡 单击 允许其他网络用户通过此计算机的 Internet 连接进行连接 复选框 然后选择 家庭网络连接 在研究这个问题时 我发现了多组 COM 接口 1 Internet 连接
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud

随机推荐

  • ruby on Rails 中的 Bootstrap 模式不起作用

    我正在尝试实现一个模式来为我的应用程序创建新用户 由于某种原因无法使其工作 这段代码只是淡入淡出 并且没有显示任何模式 我不明白为什么 事实上 我正在使用与此答案完全相同的代码如何使用 link to 添加引导模式 以便链接内容在模式中打开
  • 在 iOS 中将 PDF 文本写入 PDFContext

    通过以下方式绘制到 pdf 上下文非常简单 UIGraphicsBeginPDFContextToFile pdfFile CGRectZero nil UIGraphicsBeginPDFPageWithInfo sheet frame
  • UITableViewCell 内 UITableView 的动态行高度

    我有一个 主 UITableView 其中我使用从 xib 加载的不同单元格 其中一些单元格本身也有一个 UITableView 现在我已将每个单元格的行高设置为原始 xib 大小 但是 我希望高度动态并与 子 UITableView 中的
  • 尝试更新 MongoDb 数组元素时出错

    在我的 Azure CosmosDb MongoApi 中 我有带有嵌入文档数组的 JSON id ObjectId 5a95745df886842904b82f71 token value1 channel value2 urls url
  • 在 IF 语句中对数组使用 DelayedExpansion 索引变量失败

    我有一个批处理文件 其中显示目录中的所有 pem 文件 为用户提供选择一个文件的选项 此时只是尝试使用他们选择的数字来显示他们选择的文件 ECHO数组的内容 我相信不知何故 因为它位于 IF 语句内部 所以索引变量 selectedPem
  • Swift:#warning 等效项

    Swift 有类似的 warning 吗 它只是用于在 Xcode 自己的 GUI 中显示警告 我也对是否有 error 等效项感兴趣 苹果表示 pragma mark 即将推出 可能与此相同 Edit 从 Swift 4 2 开始 语言级
  • R:使用 IFELSE 替代方案创建数据框的最快方法

    我有一个类似的问题 这个问题在这个线程上 使用 R 将矩阵中 但就我而言 假设我有更大的数据集和可变阈值 我需要使用同一数据帧第一列上的值创建一个数据帧 其中包含从条件中检索的每个值 每条线的这些值都不同 这是数据框的示例 SNP A1 A
  • C# 将密钥发送到其他应用程序到特定文本字段

    我需要使用 C 将密钥发送到其他应用程序到其他应用程序中的特定文本字段 那可能吗 如果是 有人可以给我示例代码吗 SendKeys只将击键组合发送到活动窗口 因此 如果您的 C 应用程序调用SendKeys在正确的时间运行 当用户将其他应用
  • Javascript 中的 String 是原始类型还是对象?

    Javascript 中的 String 是原始类型还是对象 消息人士称 Undefined Null Boolean Number 和 String 都是 Javascript 中的原始类型 但它说 String 也是一个对象 我很困惑
  • Java:扩展类加载器从 Java 13 中的哪里获取类?

    我能找到的所有文档都提到了 jre lib ext 文件夹 但我的 JRE 13 安装中不存在该文件夹 我猜想在 Java 8 我可以在 jre lib ext 中看到 jar 和 Java 13 之间的某个地方 它们移动了 但我无法确定它
  • 批量替换文本文件中的文本(Linux/OSX 命令行)

    我有数百个文件 需要更改其部分文本 例如 我想将 http 的每个实例替换为 rtmp 这些文件具有 txt 扩展名 并且分布在多个文件夹和子文件夹中 我基本上正在寻找一种遍历每个文件夹 子文件夹和每个文件的方法 脚本 如果它在该文件中发现
  • 终止空闲的 mysql 连接

    我看到很多连接处于打开状态并且长时间处于空闲状态 例如 5 分钟 是否有任何解决方案可以在不重新启动 mysql 服务的情况下从服务器终止 关闭它 我正在维护旧版 PHP 系统 无法关闭为执行查询而建立的连接 我是否应该将 my cnf 文
  • UIImageView 动画RepeatCount 奇怪的行为

    所以我有这段代码可以无限次地对一组图像进行动画处理 但是一旦我尝试限制它的动画处理次数 它就不起作用了 甚至没有显示图像 有效的代码 animatedMap animationImages NSArray arrayWithObjects
  • 如何为图标内的文本着色

    我想问是否有一种方法可以为我将鼠标悬停在下面链接的图标上添加颜色 例如 如果我将鼠标悬停在文本上 如何才能仅将文本的颜色设置为 红色 我认为你必须结合照片编辑器来完成它 但我真的不知道如何做 感谢帮助 这是我尝试过的代码 section a
  • Mysql - 更新表中列具有空值的第一行

    我有一个包含 API 密钥列表的数据库 我需要将电子邮件和姓名与这些关联起来 我希望我的查询更新第一行中电子邮件为空的姓名和电子邮件 id key name email 1 3046GUGYi7ab NULL NULL 2 TXQzL33H
  • 在没有工具栏的新进程中启动 Internet Explorer 7

    我需要在 IE 中运行一个 Web 应用程序 因此它至少看起来与独立应用程序类似 我还需要能够在单独的会话中同时运行此 Web 应用程序的多个实例 为了实现这种外观 我希望始终在新进程中启动 Internet Explorer 7 而无需从
  • 使用 GCC 扩展 ASM 将内联 Intel ASM 转换为 AT&T ASM

    我花了 2 天的时间来研究 AT T 内联汇编 但是在转换这个汇编时遇到了一些问题 static char vendername 50 0 asm mov eax 0 cpuid mov dword ptr vendername ebx m
  • 如何使用 List 填充 DropDownList

    我有一个下拉列表 我需要用收集到的项目填充它List
  • 使用 SBT,如何指定除当前目录之外的备用项目根目录来运行主类?

    通常 SBT 会在以下位置查找构建文件 build sbt and project Build scala 是否可以指定备用项目根目录 以便我可以构建不在当前工作目录中的项目 我本质上正在寻找相当于mvn f path to pom xml
  • 无法修改 c:\windows 目录中的 .ini 文件

    我正在编写一个 C Windows 应用程序来更新旧应用程序的 ini 文件 我没有旧应用程序的源代码 因此无法对其进行修改 旧版应用程序将设置存储在 C Windows 的 INI 文件中 该位置无法更改 为了修改 INI 设置 我一直在