2017-08-01 95 views
-1

我有一個程序,它從文件「。\ abcd.ini」中讀取GetPrivateProfileString - 即它將查找當前目錄中的ini文件。 如果沒有找到ini文件,它將在第三個參數中設置爲GetPrivateProfileString的默認值。GetPrivateProfileString和AppData VirtualStore目錄

我有一個安裝程序,它將程序安裝到c:\program files (x86)\abcd\client目錄。

最初,安裝程序還在具有特定配置文件字符串鍵/值對的相同目錄中安裝了abcd.ini文件。發佈後,我將安裝程序更改爲不安裝任何ini文件。

但是,該程序繼續從舊的ini文件中獲取該值,即使該文件不存在於該目錄中,該值也已發送。

做了系統範圍的搜索後,我發現abcd.ini的副本c:\Users\myusername\AppData\Local\VirtualStore\Program Files (x86)\abcd\Client

一旦我刪除了這一點,該程序工作正常(因爲如果沒有ini文件)。

谷歌搜索似乎使用虛擬庫,因爲myuser沒有c:\ program files(x86)的完整權限。但是,程序本身不寫入ini文件,它只能從中讀取。

這實際上是應該如何?爲什麼ini文件複製到AppData &爲什麼程序從那裏讀取,如果沒有本地副本?

我在Windows 10 64位。

+0

評論不適用於擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow。COM /間/ 150849 /討論上個問題按user93353-getprivateprofilestring-和應用程序數據虛函數)。 – meagar

+0

如果要禁用VirtualStore,請添加清單文件。有關更多信息,請參閱https://stackoverflow.com/a/4730128/1983398。 – ssbssa

回答

2

診斷是EXE程序確實聲明瞭自己與UAC兼容的not contain a manifest。對於仍然使用GetPrivateProfileString()的應用程序,這種情況並不少見。

這實際上應該是這樣嗎?

是的,這是現代Windows版本(主要版本> = 6,Vista和更高版本)處理假設用戶始終具有管理權限的傳統程序。將文件訪問權重定向到VirtualStore目錄可確保缺少對Program Files目錄的訪問權限不會造成麻煩。

只讀取它

操作系統沒有時光機去猜測你是否威力寫入文件,並在前一交易日這樣做了。所以它必須先檢查VirtualStore目錄。找到.ini文件。

這對而不是也很重要,假設它是您的程序在該目錄中獲得.ini文件。它本來可以由另一個古老的程序完成,如文本編輯器。或者您的程序的以前版本。或者您使用的安裝程序。

-2

是的,因爲程序會崩潰,所以Windows將程序重定向到VirtualStore目錄。

+0

爲什麼程序會崩潰? – user93353

相關問題