﻿# CasPol.exe 程式碼存取安全性原則工具幾個常用的指令

[程式碼存取安全性](http://msdn.microsoft.com/zh-tw/library/930b76w0\(VS.80\).aspx)(CAS, [Code Access Security](http://msdn.microsoft.com/en-us/library/930b76w0\(VS.80\).aspx))是 .NET Framework 中非常重要的一部份，不過我發現大部分的 ASP.NET 開發人員並不清楚 CAS 是什麼，因為在開發 ASP.NET 的時候很少有機會去碰觸到這一塊，最近我們工程師在用 .NET 寫一個 COM 元件時就發生了 CAS 的權限問題，導致程式無法正常執行的情況。

我這篇不會多講有關於 CAS 的觀念，請各位到 MSDN 的 [.NET Framework 中的安全性](http://msdn.microsoft.com/zh-tw/library/fkytk30f\(VS.80\).aspx) 單元學習相關知識，或是購買書籍來看，例如：Microsoft .NET Framework 2.0 應用程式開發基礎 Ⅱ。

底下是我整理的一些[程式碼存取安全性原則工具 (Caspol.exe)](http://msdn.microsoft.com/zh-tw/library/cb6t8dtz%28VS.80%29.aspx)常用的參數與使用的情境：

**1\. 查詢某個組件所屬的程式碼群祖(Code Group)**

```
caspol -resolvegroup "C:\Program Files\MyApplication\MyApplication.exe"
```

**2\. 查詢某個組件所擁有的使用權限(Permission)**

```
caspol -resolveperm "C:\Program Files\MyApplication\MyApplication.exe"
```

**3\. 設定某個組件為「完全信任」**

```
caspol -addfulltrust "C:\Program Files\MyApplication\MyApplication.exe"
```

> 當不具有管理權限的使用者執行 Caspol.exe 時，除非指定 -machine 選項，否則所有選項都將參考使用者層級原則。當系統管理員執行 Caspol.exe 時，除非指定 -user 選項，否則所有選項都將參考電腦原則。

**4\. 新增一個程式碼群祖(Code Group)到本機電腦原則(Machine)**

```
caspol -machine -addgroup All_Code -url \\myserver\sharefolder\* LocalIntranet 
       -name "My_Code_Group"
```

注意事項：執行這行的時候會出現以下提示訊息：

```
Microsoft (R) .NET Framework CasPol 2.0.50727.1433
Copyright (c) Microsoft Corporation.  All rights reserved.

執行的作業將會變更安全性原則。
您確定要執行這項作業嗎? (yes/no)
```

不過，你要輸入 y 才能過關喔！如果你輸入的是 yes 就會出現 "儲存原則已中止" 的錯誤訊息！

**5\. 列出本機電腦原則(Machine)所有的程式碼群組**

```
caspol -machine -lg
```

    這行指令會列出所有本機電腦原則(Machine)中的所有程式碼群組，並以編號的方式呈現，如下：

```
Microsoft (R) .NET Framework CasPol 2.0.50727.1433
Copyright (c) Microsoft Corporation.  All rights reserved.

安全性為 ON
執行檢查為 ON
原則變更提示為 ON

層級 = Machine

程式碼群組:

1.  (等位) All Code: Nothing
   1.1.  (等位) 區域 - MyComputer: FullTrust
      1.1.1.  (等位) StrongName - 0024000004800000940000000602000000240000525341
31000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C9992
1EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05
ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC496
3D261C8A12436518206DC093344D5AD293: FullTrust
      1.1.2.  (等位) StrongName - 00000000000000000400000000000000: FullTrust
   1.2.  (等位) 區域 - Intranet: LocalIntranet
      1.2.1.  (等位) All Code: 相同的 Web 網站
      1.2.2.  (等位) All Code: 相同的目錄 FileIO - 'Read, PathDiscovery'
   1.3.  (等位) 區域 - Internet: Internet
      1.3.1.  (等位) All Code: 相同的 Web 網站
   1.4.  (等位) 區域 - Untrusted: Nothing
   1.5.  (等位) 區域 - Trusted: Internet
      1.5.1.  (等位) All Code: 相同的 Web 網站
   1.6.  (等位) URL - \\myserver\sharefolder\*: LocalIntranet
成功
```

**6\. 刪除第 4 點所新增的程式碼群組**

    如同第5點所示，1.6 就是我們剛剛在第4點新增的程式碼群組，所以刪除的語法如下：

```
caspol -rg 1.6
```

**7\. 將最近儲存的本機電腦原則(Machine)原則復原。**

```
caspol -machine -recover
```

這個[程式碼存取安全性原則工具 (Caspol.exe)](http://msdn.microsoft.com/zh-tw/library/cb6t8dtz%28VS.80%29.aspx)真的很複雜，上列的那些指令只是我認為比較有可能會用到的，其他更進階的設定除了上 MSDN 查看之外，可能也要 Try 一下才知道怎麼使用。

**相關連結**

-   [程式碼存取安全性原則工具 (Caspol.exe)](http://msdn.microsoft.com/zh-tw/library/cb6t8dtz%28VS.80%29.aspx)
-   [.NET Framework 中的安全性](http://msdn.microsoft.com/zh-tw/library/fkytk30f\(VS.80\).aspx)
-   [程式碼存取安全性](http://msdn.microsoft.com/zh-tw/library/930b76w0\(VS.80\).aspx)
-   Microsoft .NET Framework 2.0 應用程式開發基礎 Ⅱ  
    P.S. 這本書翻譯錯誤的地方很多，看書的人要自己有判斷錯誤的能力，且範例的指令也有些該空格的地方沒分開，直接照著打指令可能會出錯。
