2011-10-24 92 views
1

我曾對類似問題的一些答案進行過偵察,但他們並沒有真正幫助我。寫入appdata文件夾 - 權限問題?

我有一個應用程序,我已經嵌入了一些資源。在啓動時,應用程序將檢查appdata文件夾中是否存在資源,如果不是將模板文件從嵌入資源複製到appdata文件夾,然後加載它們,然後使用appdata文件夾中的模板文件作爲工作副本。

我有一個輔助類,除其他事項如下返回應用程序數據和資源的子文件夾:

class Folders 
{ 
    static public String GetUserFolder() 
    { 
     return Application.LocalUserAppDataPath; 
    } 

    static public String GetResourcesFolder() 
    { 
     // If the resources folder does not exist then create it 
     String userFolder = GetUserFolder(); 
     String resourcesFolder = userFolder + "\\Resources"; 

     if (!Directory.Exists(resourcesFolder)) 
     { 
      Directory.CreateDirectory(resourcesFolder); 
     } 
     return resourcesFolder; 
    } 

    ... 

所以我的代碼調用GetResourcesFolder方法,它返回的路徑(在此過程中創建文件夾,如果需要到)會檢查文件是否存在,如果不嘗試它來寫東西用它喜歡:

 String filename = Helpers.IO.Folders.GetResourcesFolder() + "\\data.dat"; 
     FileStream outFile = System.IO.File.OpenWrite(filename); 

所以我給自己定的場景,這個代碼工作在所有的機器,我在開發辦公室。然而,一些非現場的同事抱怨說他們的機器「崩潰」 - 每種情況下都是一臺XP機器 - 但是沒有很多有用的信息從他們那裏回來 - 試圖從他們那裏獲得更多的信息。我在辦公室使用了XP機器,而且沒有任何問題。

在挖掘出前段時間「歸檔」的一些真正的舊開發機器之後,我也成功地在兩臺xp(sp2)機器上發生了故障。在這兩種情況下,崩潰似乎都與寫入權限有關,並使用「運行方式...」運行應用程序已解決該問題並正確執行。但是,一旦應用程序成功運行,一旦應用程序不再崩潰,即使我刪除了從appdata文件夾創建的文件/文件夾,即使我沒有提升權限,它仍然會在後續執行中創建成功。

我現在的問題是,我現在不能在任何可用的開發機器上重複崩潰,我不知道如何將機器放回到可以使用的狀態。

任何人都可能對導致問題的原因有任何想法,或者我可以如何將機器返回到「處女」狀態,以便能夠重複崩潰並幫助我追蹤它。

+0

我注意到,有時如果我將exe文件複製到有問題的機器上的其他位置,然後運行它,我現在可以重複這個問題(問題是一個不受監視的SecurityException),但是如果我運行調試代碼從Visual Studio中不會發生問題 - Visual Studio是否使用提升的權限運行代碼? –

+0

我可以推薦使用'Path.Combine(GetUserFolder(),「Resources」);' – aligray

回答

3

一個行爲是創建一個XP虛擬機。您可以在安裝測試前保存機器的狀態。安裝完成後,只需恢復到之前的狀態即可再次測試。有幾個供應商提供免費的虛擬機:

http://www.microsoft.com/windows/virtual-pc/

https://www.virtualbox.org/

太相關的問題本身,我不知道一個更好的辦法,而不是在虛擬機上安裝VS用於測試目的。

+0

好主意,我的虛擬機在我的mac上運行,我會試着看看我能否重複這個問題。 –

+0

關於虛擬機上的調試/測試,您應該使用遠程調試器。如果虛擬機不屬於同一網絡,則可能會存在一些權限問題(請參閱:http://www.wictorwilen.se/Post/How-to-get-Remote-Debugging-work-properly.aspx) – Reddog

0

+1給Erik的VM解決方案來解決問題。

對於跟蹤權限問題考慮使用將procmon(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) - 將顯示enverything你曾經想(而不是:))有關的工序,製作文件/ regisstry訪問。我建議首先在機器上多次嘗試它,在該程序中,您的程序可以正常工作,爲您的過程獲得過濾設置並瞭解應該發生的情況。