2008-10-07 54 views
3

我有一個用C#編寫的應用程序,位於網絡共享上。當我從本地驅動器運行它時,一切正常。當我從遠程共享啓動它時,如當應用程序從遠程文件夾啓動時引發SecurityException

try 
{ 
    System.Reflection.Assembly.GetExecutingAssembly(); 
    System.IO.Directory.GetCurrentDirectory(); 
} 

拋出SecurityException'請求失敗'。

這是什麼引起的,本地啓動的應用程序與從遠程位置啓動的應用程序有什麼區別?

回答

5

這是由於CAS;從本地機器啓動的代碼比內聯網中的代碼更可靠,而代碼更可信任互聯網上的代碼。

IIRC,最新的SP(3.5SP1?)如果你有映射的份額(即F :),那麼它是可信的;否則,你將需要:

一:應用caspol改變向所有客戶端(yeuck)

B:使用ClickOnce部署應用程序,並運行。應用,而不是

(耶!)重點在於ClickOnce允許您簽署應用程序並聲明您的安全策略(即使您要求完全信任)。

+0

謝謝!該應用程序只能從網絡上的一個或兩個客戶端使用,所以我認爲我會使用caspol方法。我只是不知道我是否應該考慮是一個錯誤或功能... – Treb 2008-10-07 08:31:53

+0

微軟認爲它是一個功能。我們其他人認爲它是一個PITA。 – 2008-12-16 17:14:51

2

因爲您的應用程序在共享驅動器上啓動,所以適用不同的執行安全策略。

這意味着要學習.NET Code Access Security如何工作。

http://msdn.microsoft.com/en-us/library/aa302422.aspx

一個快速和骯髒的解決方案包括去.NET Framework配置,展開運行安全策略,展開計算機,然後代碼組,然後LocalIntranet區,執行右鍵單擊它,選擇屬性,然後改變權限設置爲FullTrust。

這將允許Intranet區域中的應用程序(包括從共享網絡運行的應用程序)以完全受信任的方式運行。

這絕對不是推薦的做法。最好的方法是瞭解.NET Code Access Security如何工作,並根據您的應用程序需求應用特定的安全策略。

例如,您可以通過簽名爲應用程序提供強名稱,使用公鑰定義新的代碼組並在該代碼組上應用完全受信任的權限。然後,您可以使用相同的公鑰簽署所有「已批准」的應用程序,因此適用相同的代碼訪問安全策略。

相關問題