Я пишу приложение на C # для Windows, чтобы обновить файл .ini для устаревшего приложения.У меня нет исходного кода унаследованного приложения, поэтому я не могу его изменить.
Устаревшее приложение сохраняет настройки в INI-файле в C: \ Windows.Это местоположение не может быть изменено.
Чтобы изменить настройки 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» показываютправильные / измененные значения.
Кроме того, я даже пытался записывать напрямую в INI-файл, используя классы System.IO.Похоже, это не изменило INI-файл.
Если я попытаюсь скопировать файл в каталог приложения, а затем записать настройки INI, будут записаны правильные значения.Если затем я попытаюсь скопировать этот измененный файл обратно в C: \ Windows, исходный файл INI, похоже, не будет изменен.
Похоже, что на уровне ОС происходит какой-то тип кеша файлов INI?
Если я вручную редактирую файл INI с помощью текстового редактора, файл INI обновляется.
Как предлагалось на других форумах, я также пробовал этот код после написания настройки INI:
WritePrivateProfileString(null, null, null, filename);
Моя проблема в том, что унаследованное приложение не принимает изменения файла INI (даже после перезапуска унаследованного приложения).