我正在編寫一個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它永遠不會更新兩個。我的猜測是你的文本編輯器正在運行提升 - 也許是因爲你提出了這個要求,或者是因爲你以管理員身份登錄(不僅僅是管理員組中的某個帳戶)。擡起的文本編輯器可以寫入該位置。 –