我正在编写一个 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 文件更改(即使在重新启动旧应用程序后)。