2009-05-20 83 views
1

在我走錯了路徑之前只是尋找一些指針。我已經編寫了一個小型C#控制檯應用程序,可以從我們的用戶註冊表中打開,讀取,寫入和刪除HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下的文件從C#控制檯應用程序調用時出現RegistryPermission錯誤

當然,我可以在我的PC和所有測試PC上運行,但我們的客戶之一是得到一個錯誤,當他們嘗試運行.exe

System.Security.SecurityException:請求類型System.Security.Permissions.RegistryPermission,mscorlib程序,版本= 2.0.0.0」的許可,文化=中性,PublicKeyToken = b77a5c561934e089'失敗。

在System.Security.CodeAccessSecurityEngine.Check(對象的需求,StackCrawlMark & stackMark,布爾isPermSet) 在System.Security.CodeAccessPermission.Demand() 在Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(字符串subkeyName) 在Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission(字符串subkeyName,布爾> subKeyWritable) 在Microsoft.Win32.RegistryKey.OpenSubKey(字符串名稱,布爾可寫的) 在EstateMasterClearReg.Program.Main(字串[] args)

動作失敗的是:

需求。 第一許可失敗的類型是: System.Security.Permissions.RegistryPermission 大會的區失敗是: 聯網

正如我不能對此進行測試的客戶端上機器(他們說,他們有本地運行的.exe,並以管理員身份登錄)有什麼我可以做的嘗試,並確保該應用程序可以在任何機器上運行?

我是否需要使用強名稱鍵和AllowPartiallyTrustedCallers,還是應該使用System.Security.Permissions.RegistryPermission?

感謝您的幫助。

+0

順便說一句,你可以通過「本地運行」來定義你或客戶端的含義嗎?你的意思是.EXE位於本地驅動器並從那裏執行? – 2009-05-20 01:56:49

+0

這是我的假設(這是他們通過電話告訴我的。)我更新了下面的評論,但基本上,我的意思是我告訴他們他們需要將它保存到他們的C驅動器並從那裏運行它。 – Skittles 2009-05-20 03:33:55

回答

2

看起來他們可能會通過網絡運行您的可執行文件。讓他們嘗試將其複製到本地硬盤並再次運行。分配給可執行文件的權限在從網絡共享運行到從本地文件系統運行之間有所不同。

或者,他們可能已經修改了默認的安全設置,因此即使它在本地運行,也會被視爲Intranet區域的一部分。檢查這些。

這裏的技巧也可能會有所幫助:

http://blogs.msdn.com/shawnfa/archive/2003/06/20/57023.aspx

請注意,如果你給你集強名稱,你仍然需要本地安全策略進行修改,以讓您的裝配相應的權限。強名稱本身不會授予所需的額外權限。