.NET使用interop遇到的權限問題

  • 1434
  • 0
  • 2023-10-26

前篇文章Excel轉ODS檔案中提到,使用Interop來操作Excel幫我們轉檔這個做法。
沒想到在實作的上居然遇到這麼多問題……

以下操作目前都是在本機執行階段碰到的,還沒佈上 Server 測試過

首先,在開啟 Excel 檔案的時候,出現找不到檔案的錯誤。

這個是 Excel 程式沒有權限的問題,所以要先去設定。
別像我一樣跑去 Program Files 找半天,這要去元件管理才能設定。
元件服務 > 電腦 > 我的電腦 > DCOM 設定 > Microsoft Excel 應用程式,右鍵內容 > 安全設定
把啟動和啟用權限、存取權限都加上 ASP.NET 的帳戶即可

有些文章有提到,要把識別身分從執行啟動的使用者→互動式使用者。
但是我設定了之後出現了其他.COM 的錯誤,看其他文章有人有提到要設定登入者的帳密,想說是不是網域的問題。
結果設定後又遇到無法使用物件連結與內嵌(Cannot use object linking and embedding)的錯誤!
最後改回原來的從執行啟動的使用者執行成功…… 氣死我了……

另外要注意的是參考的 COM 元件要對應到伺服器安裝的 Office 版本。
一開始我直接從 nuget 上安裝,結果後來發現版本不對才改成手動加入參考。

最後紀錄一下黑暗執行緒的這篇文章(透過 .NET 程式操作 Excel 的注意事項
在撞壁的時候有發現,工作管理員裡面多了一堆 Excel.exe 的垃圾必須清掉。
每執行一次失敗就會多一筆,非常煩人。
文章中有實作如何釋放這些元件,避免資源被占用。

參考文章:
https://dotblogs.com.tw/shadow/archive/2011/05/02/24043.aspx?fid=32263
https://www.cnblogs.com/coy/archive/2008/06/26/1230350.html