2011-08-02 92 views
2

我的項目是一個更大項目的插件。較大項目中的一個錯誤會創建一個文件,導致我的應用程序崩潰。他們已經意識到這個問題並且正在解決它,但同時唯一的解決方法是刪除每個用戶的appdata目錄中的某個文件。查找所有用戶的AppData目錄

該計劃是在安裝較小的插件時,導航到每個用戶的appdata目錄以刪除有問題的文件(如果存在)。有什麼方法可以找到每個用戶的appdata目錄。請記住這是一個安裝,所以我們將擁有管理員權限。一些我所看到的東西是用

WindowsIdentity.Impersonate(IntPtr someUser) 
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

那麼這純粹是莫名其妙得到IntPtr的,這我不能確定如何獲得的問題。

這是我現在最好的解決方案。那麼如何獲得每個用戶的IntPtr?還是有更好的解決方案?

我能想到的下一個最好的辦法就是遍歷C:\Users\eachUser\AppData\的所有目錄並刪除存在的文件。但是,再次,在XP中,該位置必須是C:\Documents and Settings\eachUser\Application Data\,我將創建特定於操作系統的代碼。建議?

回答

4

WindowsIdentity.Impersonate Method (IntPtr userToken)

的IntPtr userToken是...

一個窗口的句柄帳戶標記。此令牌通常通過調用非託管代碼(如調用Win32 API LogonUser函數)來檢索。

所以,你不能這樣做,除非你有所有的用戶名和密碼。

編輯:爲什麼不在運行時爲當前用戶刪除文件?你的插件是否有權這樣做?編輯2:您可以使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)的安裝用戶目錄,然後使用Directory.GetDirectories查找其他具有配置文件的用戶。然後,您可以添加特殊的文件夾名稱。相當圓潤,但它可能在你的「捏」中起作用。

+0

我們的插件從較大的應用程序運行,並且即使運行我們的代碼之前,較大的應用程序也會崩潰。它崩潰,因爲它不指望我們的插件在那裏,我們正在刪除的文件是列出插件的文件,迫使它重新創建插件列表。 – SaulBack

+0

然後,我想我的Edit2是你最好的選擇。 –

+0

我擔心我不得不做一個醜陋的一輪這樣做。不過,感謝您的幫助。 – SaulBack

相關問題