【转】Asp.Net中Excel操作权限的问题
近日在打開原來寫的一個網頁程序運行時,出現了Excel操作權限的問題,具體的說就是在代碼中調用下面這段與Excel操作有關的語句時
Application curExcelApp = new ApplicationClass();
提示權限不足,具體的提示內容如下:
檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失敗,原因是出現以下錯誤: 80070005。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。 異常詳細信息: System.UnauthorizedAccessException: 檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失敗,原因是出現以下錯誤: 80070005。 ASP.NET 未被授權訪問所請求的資源。請考慮授予 ASP.NET 請求標識訪問此資源的權限。ASP.NET 有一個在應用程序沒有模擬時使用的基進程標識(通常,在 IIS 5 上為 {MACHINE}\ASPNET,在 IIS 6 上為網絡服務)。如果應用程序正在通過 <identity impersonate="true"/> 模擬,則標識將為匿名用戶(通常為 IUSR_MACHINENAME)或經過身份驗證的請求用戶。 要將 ASP.NET 訪問權限授予某個文件,請在資源管理器中右擊該文件,選擇“屬性”,然后選擇“安全”選項卡。單擊“添加”添加適當的用戶或組。突出顯示 ASP.NET 帳戶,選中所需訪問權限對應的框。
?
源錯誤:
? //創建Excel信息?
object?missing?=?System.Reflection.Missing.Value;
Application?curExcelApp?=?new?ApplicationClass();
curExcelApp.Application.DisplayAlerts?=?false;
Workbook?curWorkBook?=?curExcelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
?
原來碰到過這種情況,知道是由于Excel的DCom組件權限不足所引起的,所以按照原來的步驟進行設置,如下所示:?
??????? 1:在服務器上安裝office的Excel軟件;?
??????? 2:在"開始"->"運行"中輸入dcomcnfg.exe啟動"組件服務";
??????? 3:依次雙擊"組件服務"->"計算機"->"我的電腦"->"DCOM配置";?
??????? 4:在"DCOM配置"中找到"Microsoft Excel 應用程序",在它上面點擊右鍵,然后點擊"屬性",彈出"Microsoft Excel 應用程序屬性"對話框;?
??????? 5:點擊"標識"標簽,選擇"交互式用戶";?
??????? 6:點擊"安全"標簽,在"啟動和激活權限"上點擊"自定義",然后點擊對應的"編輯"按鈕,在彈出的"安全性"對話框中填加一個"NETWORK SERVICE"用戶(注意要選擇本計算機名),并給它賦予"本地啟動"和"本地激活"權限。在XP系統和2000系統中添加ASPNET用戶;
??????? 7:依然是"安全"標簽,在"訪問權限"上點擊"自定義",然后點擊"編輯",在彈出的"安全性"對話框中也填加一個"NETWORK SERVICE"用戶,然后賦予"本地訪問"權限.?
??????? 注意:其中第5步是必須的,否則會出現以下錯誤:?
??????? 內存或磁盤空間不足,Microsoft Office Excel 無法再次打開或保存任何文檔。 ? 要想獲得更多的可用內存,請關閉不再使用的工作簿或程序。 ? 要想釋放磁盤空間,請刪除相應磁盤上不需要的文件。
?
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。 異常詳細信息: System.Runtime.InteropServices.COMException: 內存或磁盤空間不足,Microsoft Office Excel 無法再次打開或保存任何文檔。 ? 要想獲得更多的可用內存,請關閉不再使用的工作簿或程序。 ? 要想釋放磁盤空間,請刪除相應磁盤上不需要的文件。
?
?
源錯誤:?Application?curExcelApp?=?new?ApplicationClass();
curExcelApp.Application.DisplayAlerts?=?false;
Workbook?curWorkBook?=?curExcelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet?curWorkSheet?=?(Worksheet)curWorkBook.Sheets.get_Item(1);
?
?
按照上述步驟設置好了以后,重新執行程序,還是出現權限不足的問題,問題不知道出現在什么地方,仔細分析提示信息和代碼,終于發現了問題的所在,原來是在Web.config中進行了下面的設置:
??????? <identity impersonate="true"/>?
??????? 而這段話的目的是為每一個請求進行客戶端模擬,按照提示信息中的解釋,由于沒有設置Username,所以當前執行的用戶是IUSR_MACHINENAME,而該用戶是沒有操作Excel組件的權限,為了驗證分析是否正確,進行了一下驗證:?
??????? 將這句話刪除,執行程序,一切正常;?
??????? 在Excel的操作權限中加入當前登陸的用戶,并進行如下的設置:<identity impersonate="true" userName="***" password="***"/>,執行程序,一切正常;?
??????? 在Excel的操作權限中加入所有的用戶,并進行如下的設置:<identity impersonate="true"/>,執行程序,出現權限不足的錯誤。?
??????? 通過以上的驗證,我們可以得出,在不進行客戶端模擬設置時,asp.net程序調用excel組件時使用的是network service用戶(在xp和2000中,使用的是aspnet用戶),使用設置<identity impersonate="true"/>進行客戶端模擬時,使用的是IUSR_MACHINENAME用戶,但該用戶沒有調用excel組件的權限,即使設置了該用戶的相關權限也不行;使用設置<identity impersonate="true" userName="***" password="***"/>進行客戶端模擬時,只要設置了相關用戶的權限,就可以順利地調用Excel組件,但是要注意的是:由于asp.net的限制,該用戶的密碼不能為空。?
??????? 在處理該問題時,在網上找到了一個比較有用的資料,與大家分享如下:?
??????? 解決部署在Window Server 2003 上Excel.exe進程問題
??????? 在操作完Excel以后,每次就會留下一個Execl.exe進程,無論如何也關閉不了,包括用垃圾回收等,原因我也不知道,但是在其他服務器操作系統和xp操作系統上不存在這種問題。
?
??????? 解決此類問題,有一個方法可以借鑒,就是殺死進程的方法,但是有一定的風險,要注意,具體方法如下:?
??????? 操作進程有一定的風險,所有首先要有此類權限,添加權限方法,在web.Config里面添加權限<identity? impersonate="true"?? userName="登錄名"?? password="密碼 "/>
?
? 殺死進程方法??????????publicstaticvoid?KillProcess(string?processName)
????????{
????????????System.Diagnostics.Process?myproc?=?new?System.Diagnostics.Process();
????????????//得到所有打開的進程
????????????try
????????????{
????????????????foreach?(Process?thisproc?in?Process.GetProcessesByName(processName))
????????????????{
????????????????????if?(!thisproc.CloseMainWindow())?
????????????????????{
????????????????????????if(thisproc!=null)
????????????????????????thisproc.Kill();
????????????????????}
????????????????}
????????????}
????????????catch?(Exception?Exc)
????????????{
????????????????throw?Exc;
????????????}?
????????}?
?
在操作完Excel后,調用殺死進程方法就可以了,下一次就會正常調用。
?
殺死進程請參看http://www.cnblogs.com/leic2000/articles/1269122.html
轉載于:https://www.cnblogs.com/leic2000/archive/2008/08/18/1270058.html
總結
以上是生活随笔為你收集整理的【转】Asp.Net中Excel操作权限的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是SQA?
- 下一篇: ASP.NET2.0_多语言本地化应用程