2010-10-21 42 views
0

以下的小行會拋出System.Security.SecurityException:請求的註冊表訪問是不允許的:安全異常訪問註冊表時,程序運行的計劃任務

RegistryKey _key = HKLM.OpenSubKey("path\\to\\my settings", false); 

現在..有什麼意義有些人會問?問題是,只有當我登錄時,這個纔會運行。如果程序按預定任務沒有人登錄,則拋出異常。

  • 誰運行該任務的用戶是本地管理員
  • 程序不會從網絡共享運行,它位於本地磁盤
  • 我甚至嘗試設置代碼訪問安全
  • 用戶上有權登錄作爲一個批處理作業

我有XP SP3應用了所有補丁。該程序是用C#.NET 2.0(3.5測試過)

有誰知道這裏什麼意義呢? 託斯滕

編輯:看http://gist.github.com/638576

+0

你們是不是要訪問HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \服務\事件日誌的關鍵? – 2010-10-21 13:16:11

+0

不是。這只是應用程序的普通配置設置。 – tfl 2010-10-21 13:19:02

+0

爲什麼不將任務憑據設置爲用戶帳戶? – 2010-10-21 13:25:50

回答

0

Mhhhh ...這似乎與授權的問題太多。您是否嘗試過使用API​​:OpenSubKey(....,RegistryKeyPermissionCheck)來查看是否有更改?我想這可能與父母密鑰及其授權有關。

嘗試看看:http://msdn.microsoft.com/it-it/library/microsoft.win32.registrykeypermissioncheck.aspx(您的語言)。我希望它可以幫助你......

+0

我使用過: RegistryKey _key = HKLM.OpenSubKey(「path \\ to \\ my settings 「,RegistryKeyPermissionCheck.ReadSubTree,Sy​​stem.Security.AccessControl.RegistryRights.ReadKey); 但無法正常工作或 – tfl 2010-10-21 13:31:37

+0

我應該注意完整的錯誤信息 - 它結束:失敗是組件的區域:我的電腦 – tfl 2010-10-21 13:33:12

+0

嘗試通過CAS FullTrust權限分配給該目錄的內容,其中是程序的EXE 。也許CAS的計算機級別需要登錄的用戶。 – robob 2010-10-21 15:15:07

0

你能適應這種

 
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
string isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator) ? "Yes" : "No"; 

檢查過程中真正成功模仿時,有沒有當前用戶?

+0

正在執行的用戶是admin。它打印「是」 – tfl 2010-10-21 14:16:29

0

看來,這是這個特定的計算機的問題。我在另一臺工作站上測試過它,即使沒有管理員權限也能正常工作

我以爲這 - 計劃並沒有任何問題,運行多年...無論如何,感謝所有!