我有一個用C++編寫的軟件安裝在一些1000臺PC上,這對Windows UAC有一些困難。我試圖讓事情正常工作,但我需要一些幫助來理解問題並找到正確的解決方案。與Windows UAC的C++問題
情況如下:我需要在某些文本/ xml文件中寫入一些數據,所以我開始(在XP中)將它們寫入可執行文件夾中。不知道,我知道。當Vista加入時,所有文件開始保存到VirtualStore文件夾中,這對我來說很好,所以我沒有改變任何東西。當時有幾個用戶遇到了一些問題(請參閱問題1),但是我手動修復了它們,就是這樣。現在在Windows 8中,我面臨着不同的問題(問題2),我想一勞永逸地修復它們。
- 第一個問題:在Windows Vista中,有些用戶最終發現他們的軟件是「空的」,就像剛安裝時一樣。他們的所有工作都沒有了。事實證明,suddendly Vista正在C:\ Program Files \ {MyApp}中查找他們的文件,而不是查看VirtualStore。將文件從VirtualStore複製到Program文件夾解決了這個問題,從未理解爲什麼
- 第二個問題:現在在Windows 8中,一些用戶[其中一小部分]遇到了另一個奇怪的事實;我的應用似乎無法在VirtualStore中創建文件,但它可以編輯現有文件。所以如果我手動創建文件,一切正常。如果不是該應用程序不起作用:文件既不在程序文件夾中也不在虛擬商店中修改
現在我想修理一些東西。我的計劃是移動所有需要在CSIDL_LOCAL_APPDATA中修改的文件,並讓軟件在那裏保存內容。只有可執行文件將在程序文件夾中。不過,爲了向後兼容,似乎我不能使用SHGetKnownFolderPath,它似乎是Vista +特有的。所以我會使用SHGetFolderPath,我已經棄用了,但我應該在XP中工作,並且在Vista +中充當SHGetKnownFolderPath的包裝,這對我很有用。
我的問題:
- 任何想法,我的問題1 & 2?我想了解他們,以確保我完全擊敗他們。
- UAC是否符合我的計劃?據我所知,但...
- 任何方式來確保XP的兼容性,但我的解決方法?我不喜歡使用棄用的函數,但我絕對不希望有兩個版本(XP和Vista +)來處理!
非常感謝您提供的任何幫助。 盧卡
版本檢查的目的只是忽略這些問題,他們將不再是一個問題。 SHGetFolderPath將正常工作以獲取AppData。 –
感謝@Hans Passant,我會盡力讓它真實並讓你知道! – dirluca