2011-07-25 47 views
3

很想知道爲什麼當我限制分配給程序集的權限時,我的2.0應用程序被允許執行。爲什麼CASPol允許我的.NET應用程序運行?

我在企業級創建了一個新的代碼組,它將匹配具有特定數字簽名的任何程序集。代碼組已設置爲只使用來自相關權限集的權限,並且不會評估較低的策略級別。

運行.NET 2.0 PermCalc指出我的應用程序需要以下權限:

  • UnmanagedCode,
  • 環境
  • FileIO專注
  • 註冊
  • 反思

我已分配給我的自定義代碼組非託管代碼的許可,但沒有別的。

我的應用程序中的第一種方法要求提前獲得上述所有權限,以便在退出之前向用戶顯示合理的消息。

運行.NET 2.0配置我的程序集上的「評估程序集」工具確實表明我的應用程序只能獲得UnmanagedCode權限。

但是,當我執行我的應用程序正在運行並完成時,顯然要做各種FileIO和註冊表操作。

我的應用程序使用應與限制代碼組匹配的數字簽名進行簽名。

任何人都可以解釋爲什麼這個工程。

注意:我的最終目的是確保我的應用程序不會在網絡共享中執行時發生可怕的崩潰。我希望檢查彙編證據區域是My_Computer,但我不能再用.NET 3.5 SP1來做這件事。見FullTrust On the LocalIntranet

在此先感謝您的任何幫助/建議。

回答

2

如果您已正確配置您的CAS策略,那麼很可能是您的應用程序未被拒絕,因爲它未在您配置的策略的CLR下運行。你可能在同一臺機器上安裝了32位和64位CLR?

另一種可能性可能是您的「早期檢查」需求錯誤。它是否直接在您的應用程序的Main方法中?如果是這樣,當需求運行時,在驗證的調用堆棧上將不會有任何應用程序代碼。如果這是問題,只需將需求移動到Main調用的另一個方法中就可以使需求失敗。

+0

嗨尼科爾,謝謝你的迴應。我意識到我在誤導我的問題上犯了一個錯誤。我的應用程序實際上是一個.Net 2.0應用程序(不應具有3.5的先決條件)。但我確實安裝了3.5 SP1 Framework。我需要進行檢查,因爲用戶可能只安裝了.NET 2.0,但仍嘗試從網絡共享執行。在這種情況下,該應用程序只是崩潰,我希望它更優雅。上面概述的情況是一種測試情況,我期望我的應用程序崩潰......但它不是! –

+0

我現在仔細檢查一下32/64位的clr。 –

+0

啊......現在更有意義了。我已經編輯了我的答案,在規定的條件下爲需求通過添加另一個可能的解釋。 –

-1

您仍然可以檢查.NET 3.5 SP1 - http://msdn.microsoft.com/en-us/library/system.security.policy.zone.aspx中的程序集證據區域。

對於什麼卡斯波爾允許您的組裝見http://msdn.microsoft.com/en-us/library/tx1dts55.aspx

http://blogs.msdn.com/b/brada/archive/2007/10/26/adhoc-poll-allowing-net-exes-to-run-off-a-network-share.aspx可能會影響到你所看到的......

編輯:

對於檢查從網絡共享中運行時,你仍然可以得到Assembly.GetExecutingAssembly().Location,然後檢查是否一個UNC或通過元網絡驅動器DriveType您的位置System.IO.DriveInfo[](即System.IO.DriveType.Network)。

+0

使用.NET 3.5 SP1託管的應用程序從網絡共享中運行將顯示在MY_COMPUTER_ZONE而不是INTRANET_ZONE中。這意味着我無法再檢查我的應用程序是否在MY_COMPUTER_ZONE中執行,因爲它可能仍然位於網絡共享中。 –

+0

哦好吧...不知道這是他們如何「黑客」它.. – Yahia

+0

看到我的編輯關於從網絡驅動器運行 – Yahia

相關問題