2008-09-19 68 views
2

我正在嘗試編寫一個測試,在它的固件安裝程序中,它備份了一個文件並刪除了原始文件,運行測試時沒有原始存在,然後在拆卸過程中從備份中恢復原始文件。該文件位於我的%ProgramFiles%文件夾中。我在fileInfo.Delete()語句中得到一個UnauthorizedAccessException。從沒有從Resharper Test Runner運行的同一臺機器上的另一個測試項目中刪除此文件沒有問題。爲什麼我無法通過Resharper的測試運行器單元測試從單元測試中刪除%ProgramFiles%中的文件?

我無法將文件移動到其他地方 - 它是ssapi.dll,一個安裝的Visual SourceSafe dll。 (是的,我在單元測試中做了一些侵入性操作。)

這兩個方法都是同一個用戶(我) - 我通過任務管理器進行了檢查。我的用戶帳戶是本地管理員組的成員。還有哪些其他因素決定了我的「授權」來對文件進行操作?

已解決:雖然它沒有回答我原來的問題(我仍然想知道答案),但我已經找到了解決方法,用於測試目的,使用System.Security.Permissions framewok,做在需要文件(用於Interop調用)的應用程序(非測試)代碼中需要FileIOPermissionAccess.Read,並且在該代碼的測試中需要相同的拒絕代碼,該代碼需要該文件不存在的情況。這應該現在工作(我喜歡瞭解一些關於System.Security.Permissions命名空間)!

回答

0

ReSharper可能將其測試運行器作爲單獨的進程運行,並且該單獨的進程不使用您的Windows身份,而是使用另一個具有較低權限的進程。

您可能能夠驗證此打開任務管理器並檢查所有用戶的顯示進程。

1

不是一個真正的解決方案,但我會考慮從另一個角度解決這個問題。

您可以考慮將目錄更改爲%AppData%(您可能還需要對主應用程序進行此更改)。

它可能會解決您的問題,並且在移動到Vista時也會很好地看到您,因爲UAC可能會阻止您(或應用程序用戶)使用%ProgramFiles%目錄。

0

你可以通過給你的用戶帳戶完全訪問該文件夾來解決這個問題。

導航到Windows資源管理器中的文件夾。右鍵單擊該文件夾並選擇屬性。選擇安全選項卡,然後選擇編輯按鈕,然後爲自己添加完整控件。是的 - 我想這是一個潛在的安全問題,但您必須更改該目錄中的文件,並且您似乎知道自己在做什麼,因此它應該可以工作。

0

您可以激活該文件的審覈,並檢查事件日誌中的錯誤消息。請注意,您必須在兩處開啓審覈,一次在本地安全策略/本地策略/審覈策略下,一次在文件本身。 這不會解決問題,但至少可以幫助診斷問題。

0

您是否在運行Vista或Server 2008時打開了UAC?如果是,這可能是原因 - 測試運行程序進程可能不處於「提升」模式。

相關問題