BOOL WINAPI WritePrivateProfileString( _In_ LPCTSTR lpAppName,
_In_ LPCTSTR lpKeyName, _In_ LPCTSTR lpString,
_In_ LPCTSTR lpFileName);
lpAppName
[в]
Название секции, к которой строка будет скопирован. Если раздел не существует, он создается. Название раздела: не зависит от случая; строка может быть любой комбинацией прописных и строчных букв.
lpKeyName
[in] Имя ключа, подлежащего связыванию со строкой. Если ключ не существует в указанном разделе, создается . Если этот параметр равен NULL, весь раздел, включая , все записи в этом разделе удаляются.
lpString
[in] Строка с нулевым завершением, которая должна быть записана в файл. Если этот параметр равен NULL, ключ, на который указывает параметр lpKeyName , удаляется.
lpFileName
[in] Имя файла инициализации. Если файл был , созданный с использованием символов Unicode, функция записывает в файл символы Unicode . В противном случае функция записывает символы ANSI .
Если параметр lpFileName не содержит полный путь и имя файла для файла, WritePrivateProfileString выполняет поиск в каталоге Windows файла. Если файл не существует, эта функция создает файл в каталоге Windows.
Этот последний комментарий подразумевает, что ваша программа должна запускаться как администратор. Логическим следствием является то, что если ваша программа не запускается как администратор, путь по умолчанию будет C:\Users\Windows username\AppData\Local\VirtualStore\Windows
. Итак, чтобы соблюдать современные правила Windows, лучше всего предоставить полный путь для ini-файла ...
Почему вы не устанавливаете путь по умолчанию так же, как и путь приложения? Например, используя 'TIniFile.Create (changefilext (paramstr (0), '. Ini'))' поместит ваш ini-файл в ту же папку, что и ваш исполняемый файл. – theodorusap
@ theodorusap и ломать все правила относительно UAC? – whosrdaddy
Вы, конечно, делаете все это неправильно. Вы действительно должны прекратить помещать файлы в каталог Windows или полагаться на виртуализацию. На самом деле, вы действительно должны прекратить использовать устаревшие API совместимости Win16 назад. Не спрашивайте, что такое полный путь, укажите полный путь. И переключитесь на 'TMemIniFile'. –