2011-08-04 31 views
1

在我的程序中,我一直使用SHGetFolderPath來獲取AppData路徑。不過,我需要獲取計算機上其他用戶的AppData路徑。我能想到的唯一方法是獲取當前用戶的路徑,然後用其他用戶名替換當前用戶的名稱。我不知道如何獲得用戶列表。有可能是一個更優雅的解決方案...如果你有洞察力,我將不勝感激。C++獲取其他用戶的appdata路徑

+1

爲什麼你需要那個?您無權訪問這些文件夾,除非您使用完全權限運行(並且您需要有一個很好的藉口)。 –

+0

我想不出有這樣做的好理由。聽起來不健全。 –

+0

在我的程序的以前版本中,我在appdata中有配置文件。我將它移動到最新版本的Program Files中,以便所有用戶都可以共享這些保存。如果可能(如果當前用戶)有權利,我想爲所有用戶做到這一點。 – Lienau

回答

1

對於你情我願提出以下建議:

  1. 繼續在應用程序數據存儲配置文件,但其存儲在CSIDL_COMMON_APPDATA(的SHGetFolderPath)。此AppData與所有用戶共享。您的安裝程序(或管理員用戶)可以在此位置設置一個文件夾,該文件夾以您的程序命名,使得「Everyone」可以完全訪問(Windows安裝程序非常簡單)。這樣,任何用戶都可以讀/寫它。 「程序文件」中的所有內容都不應改變。它應該只包含只讀可執行文件,DLL和其他此類資源。微軟長期以來一直不願意寫入這個位置,許多管理員不再期望遇到自定義用戶數據,這需要在Program Files中定期進行備份&恢復。

  2. 當您的軟件運行時,您可以檢查當前用戶的AppData中的數據(即由舊版本存儲),並將其與機器AppData中的數據合併(如上面的#1所述)。要爲用戶遷移數據,請以該用戶身份登錄並運行軟件。

真的沒有一個好方法,我知道從其他用戶配置文件收集所有數據。沒有任何Microsoft支持,那是(我知道!)。

關於程序文件中的數據存儲:http://msdn.microsoft.com/en-us/library/bb776776(VS.85).aspx「不要將用戶數據存儲在Program Files文件夾下。」還有很多其他的參考文獻都說類似。