影评周公子 2026-05-06 23:30 采纳率: 99.1%
浏览 1
已采纳

如何仅卸载SolidWorks PCB模块而不影响其他SW组件?

**常见技术问题:** 在SolidWorks 2020及后续版本中,PCB模块(即SolidWorks PCB或原自收购的CircuitWorks/SolidWorks PCB集成组件)常作为独立功能套件安装,但其安装项与主程序深度耦合,导致用户在“控制面板→程序和功能”中直接卸载时,系统常提示“将移除整个SolidWorks套件”或触发主程序修复/重装流程。更棘手的是,部分用户发现卸载后,Electrical、Routing或Simulation等其他专业模块出现功能缺失、许可证校验失败或启动报错(如“SWPCBAddIn.dll未注册”)。如何在不触发全局修复、不破坏已激活许可证、不干扰现有装配/电气协同工作流的前提下,安全、精准地仅移除PCB相关组件(含后台服务、注册表项、插件加载项及本地缓存),同时确保其余SW模块(如CAD、PDM、CAM)完全正常运行?
  • 写回答

1条回答 默认 最新

  • 玛勒隔壁的老王 2026-05-06 23:32
    关注
    ```html

    一、常见技术问题深度解析

    在SolidWorks 2020+版本中,PCB模块(含原CircuitWorks集成组件及独立部署的SolidWorks PCB)并非传统意义的“插件”,而是通过MSI安装包与主套件共享SWCoreRuntimeSwAddInManager及统一许可证服务(SLM/SolidNetWork License Manager)。其注册表键值(如HKEY_LOCAL_MACHINE\SOFTWARE\SOLIDWORKS\AddIns\{A3E4D9F1-8C7D-4F2E-9B5A-3E1F8D6A0C7F})与Electrical模块共用同一GUID命名空间,导致控制面板卸载时触发Windows Installer的REINSTALLMODE=vomus策略回滚——这是“误删全量套件”的根本成因。

    二、故障链路建模(Mermaid流程图)

    flowchart TD A[用户点击“卸载SolidWorks PCB”] --> B{Windows Installer检测到
    PCB组件依赖主运行时} B -->|是| C[触发REINSTALL=ALL策略] C --> D[重建SWCoreRuntime.dll全局注册] D --> E[覆盖Electrical模块的AddInManifest.xml] E --> F[启动时加载失败:SWPCBAddIn.dll未注册] B -->|否| G[静默跳过,实际未卸载]

    三、精准卸载四维矩阵

    维度关键对象安全移除方式风险规避要点
    文件层%ProgramFiles%\SolidWorks Corp\PCB\
    %APPDATA%\SOLIDWORKS\PCB\
    手动删除目录 + 清空Temp\SWPCB_*缓存禁止删除Shared子目录下的SwPCBCommon.dll(被Routing复用)
    注册表层HKEY_CURRENT_USER\Software\SOLIDWORKS\AddIns\SWPCB*
    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\SOLIDWORKS\PCB
    导出备份后,仅删除含“PCB”“CircuitWorks”字样的键值保留Electrical\AddInEnabled=1等跨模块键值

    四、许可证与服务级隔离方案

    1. 许可证解耦:运行swlicmgr.exe -remove pcb(需管理员权限),该命令调用SLM API仅注销PCB Feature ID(FID=128),不影响FID=1(CAD)、FID=32(PDM)
    2. 服务终止:执行sc delete "SolidWorksPCBService",并确认services.msc中无残留服务项
    3. 插件热禁用:编辑%APPDATA%\SOLIDWORKS\SOLIDWORKS 202X\swbrowser.cfg,注释掉SWPCBAddIn=1行,避免启动时DLL加载
    4. 装配协同保护:保留%ProgramFiles%\SolidWorks Corp\Electrical\Importers\PCBImport.dll(用于ECAD-MCAD双向引用),仅禁用其自动加载

    五、验证清单与回归测试脚本

    执行以下PowerShell脚本完成自动化验证(兼容Win10/11 + SW2020–2024):

    $checks = @(
      @{Test="PCB服务已停用"; Cmd="Get-Service 'SolidWorksPCB*' -ErrorAction SilentlyContinue | ForEach-Object {$_.Status}" ; Expect=""},
      @{Test="许可证状态正常"; Cmd="& '$env:ProgramFiles\SOLIDWORKS Corp\SOLIDWORKS\swlicmgr.exe' -status | Select-String 'Feature.*128.*Not Licensed'" ; Expect="True"},
      @{Test="CAD模块可启动"; Cmd="Start-Process 'sldworks.exe' -ArgumentList '-noquickstart' -WindowStyle Hidden -PassThru | Wait-Process -Timeout 30 -ErrorAction SilentlyContinue"; Expect="NoException"}
    )
    $checks | ForEach-Object {
      try { $r = Invoke-Expression $_.Cmd; $status = if($r -match $_.Expect){"✅"}else{"❌"} } 
      catch { $status = "❌" }
      Write-Host "$($_.Test): $status"
    }

    六、企业级部署建议(面向IT运维)

    • 使用msiexec /x {ProductCode} REMOVE=PCB ADDLOCAL=ALL替代控制面板卸载(需提前通过Orca.exe提取PCB组件Code)
    • 为PDM用户配置FileVault白名单规则,禁止*.pcbdoc检入,从源头阻断PCB工作流
    • 在SCCM/Intune中部署注册表策略模板(ADMX),锁定HKEY_LOCAL_MACHINE\SOFTWARE\SOLIDWORKS\AddIns\下非PCB键值的写权限
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 5月7日
  • 创建了问题 5月6日