首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 調用 SolidWorks API 打開 SLDPRT 文件的完整方案與坑點避坑指南

     編輯:程式設計疑難解答

問題回顧

在 ASP.NET WebForms 頁面中嘗試通過 SolidWorks Interop 組件打開零件文件(.SLDPRT),引用 SolidWorks.Interop.sldworks 與 SolidWorks.Interop.swconst 後,運行時報錯:
COM 類工廠檢索失敗,CLSID {88CEE7FD-9F58-4962-8483-041AB9AD69A2},錯誤 80040154 (REGDB_E_CLASSNOTREG)。

根因分析

  • Web 環境無法直接啟動 SolidWorks 桌面應用:IIS 工作進程運行於非交互式 Session 0,無法訪問用戶桌面會話中的 SolidWorks 實例;
  • COM 組件註冊上下文不匹配:32/64 位不一致、未以管理員身份註冊、或 SolidWorks 未安裝/授權;
  • 線程單元模型衝突:ASP.NET 默認 MTA,而 SolidWorks API 需 STA 線程。

可行解決方案

方案一:進程啟動法(最簡單,適合僅需「雙擊打開」效果)

string filePath = @"E:\a.SLDPRT";
System.Diagnostics.Process.Start(filePath);
// 系統會根據文件關聯自動啟動 SolidWorks 並加載文件

優點:無需引用 Interop、繞過 COM 權限、支持任意文件類型。
缺點:無法程式化控制 SolidWorks 內部操作(如提取特徵、修改參數)。

方案二:獨立 Windows 服務 + IPC 通訊(企業級方案)

  1. 編寫一個 Windows Service / 控制台程式 運行於用戶會話,引用 SolidWorks API 實現具體操作;
  2. Web 端通過 NamedPipe、TCP Socket 或 MSMQ 發送指令(文件路徑、操作類型、參數);
  3. 服務端執行後將結果(截圖、屬性報表、導出 STEP/IGES 等)回傳。

方案三:SolidWorks PDM / Web2 / API Gateway(官方生態)

若預算允許,部署 SolidWorks PDM Professional 或使用 SolidWorks Web API (SWA),提供標準化 REST 接口,徹底解決 Web 集成難題。

關鍵配置檢查清單

  • 目標機已安裝 SolidWorks 同版本且啟用許可證;
  • 專案目標平台 x64(SolidWorks 2015+ 僅 64 位);
  • 引用 SolidWorks.Interop.sldworks.dll 設置 Embed Interop Types = False、Copy Local = True;
  • 調用前執行 Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
  • 以管理員權限運行 regsvr32 sldworks.tlb 確保類別註冊。

總結

Web 直接調用 SolidWorks COM 是反模式。推薦「進程啟動法」滿足簡單預覽需求,或構建「獨立服務+IPC」實現深度集成。切勿在 IIS 請求線程中實例化 SldWorksClass。

方案架構圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved