我正在编写一个C#Windows应用程序来为遗留应用程序更新.ini文件。我没有遗留应用程序的来源,所以我无法修改它。无法修改c: windows目录中的.ini文件
传统应用程序将设置存储在C:\ Windows中的INI文件中。这个位置不能改变。
要修改我一直在使用这些Windows功能INI设置:
[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文件的更改(甚至在重新启动后传统应用程序)。
当我通过文本编辑器保存INI文件时,它更新C:\ Windows \ XXX.ini文件。为什么这不会更新C:\ Users {用户名} \ AppData \ Local \ VirtualStore \版本? – FattyPotatoes
我认为这可能是因为重定向的UAC代码知道应用程序是否是遗留的(pre vista),并且只有在应用程序是遗留的时才重定向。 – hatchet
@FattyPotatoes它永远不会更新两个。我的猜测是你的文本编辑器正在运行提升 - 也许是因为你提出了这个要求,或者是因为你以管理员身份登录(不仅仅是管理员组中的某个帐户)。抬起的文本编辑器可以写入该位置。 –