日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【转】Asp.Net中Excel操作权限的问题

發布時間:2023/12/9 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】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操作权限的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。