☰
64位OPC DA客户端连不上32位服务端:COM/DCOM配置与排错
2026/10/27 13:35:42 网站建设 项目流程

简介:OPC-Client-X64.rar 是面向工业自动化上位机开发者的 OPC DA 客户端开发资料,基于 COM/DCOM 接口与 OPC 服务器交换数据,在 Visual Studio 2013 的 64 位环境下实测可用,适合需要读取、写入 PLC 过程变量或订阅数据变更通知的初、中级开发者参考。压缩包共 162 个文件、约 73.14MB,含 h/cpp/c 源码与 obj、tlog 等编译中间产物,sln、vcxproj、filters 组成的完整 VS 工程,dll、lib 形式的可复用库文件,pdb、ilk、idb 调试符号,以及 pdf、md、txt 说明文档和 exe 示例程序,工程可编译运行对照。目前已有 535 人学习下载。资源围绕 IOPCServer、IOPCItemMgt 等接口给出同步组操作、数据项增删改与性能统计等实现代码,并附配置文件与客户端演示工程,读者可据此理解 DCOM 连接建立、错误码处理与工程分层结构,较快把 OPC 采集功能接入自身上位机程序。

1. 64 位 OPC DA 客户端装完连不上,问题往往不在客户端本身

有个很典型的场景:现场一台 64 位工控机,装上 OPC-Client-X64 这套 OPC DA 客户端,双击能打开,界面也正常,可一浏览服务端列表就是空的,手动填 ProgID 也报“类未注册”。很多人第一反应是客户端包坏了,反复重装三四遍,其实真正的坑在位数:本机跑着的 OPC DA 服务端是 32 位进程,ProgID 注册在 64 位注册表的Wow6432Node分支下,64 位客户端进程默认不去那儿找。这套环境的安装门槛不在“点下一步”,而在装完之后那堆 COM 组件、代理存根、DCOM 权限有没有对齐。后面按装前盘点、解压安装、DCOM 配置、报错排查、跑通验证五段走,每一步都给出可抄的命令和失败时该看哪儿。

2. 装前环境盘点:OPC DA 客户端 X64 版到底依赖哪些组件

装 OPC DA 客户端和装一个普通桌面软件完全不是一回事。普通软件缺个 dll,弹窗告诉你缺什么;OPC DA 客户端缺组件时,界面照样打开,只是连不上,错误码还特别抽象。所以动手之前先把环境列清楚,比装完再回来补要省事得多。这一章的目的是让机器达到“可以开始装”的状态,而不是已经开始装。

2.1 系统版本与位数:X64 客户端不等于全 64 位环境

包名里带 X64,只说明客户端主程序是 64 位编译的,不代表整条链路都是 64 位。OPC DA 是 COM/DCOM 时代的东西,大量服务端至今仍是 32 位实现,两者要通,靠的是代理和存根做跨进程编组。这就意味着机器上 32 位和 64 位两套运行库、两套注册表分支都得齐。

先确认基础信息,别凭印象:

# 看系统版本与内部版本号 [System.Environment]::OSVersion.Version # 看系统类型,确认是否 64 位 $env:PROCESSOR_ARCHITECTURE # 看是否已启用 .NET Framework 4.x 及更高特性 Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' | Get-ItemProperty -Name Release, Version

第一条输出的是内核版本,比如 10.0.19045 这种;第二条正常应该是AMD64,如果是x86,这套 X64 包直接装不上,不用往下试了。第三条读的是 .NET Framework 的发布号,Release值关系到客户端界面和配置模块能不能起来——客户端界面如果是 .NET 写的,缺运行时就是双击一闪而过。

按下面这张表逐项对一遍,缺什么补什么:

环境项建议取值说明
操作系统Windows 10 / 11 或 Windows Server,64 位32 位系统无法加载 X64 主程序
客户端进程位数64 位与包名一致
服务端进程位数常见为 32 位决定要不要额外补代理与存根
.NET Framework4.x 完整版界面、配置向导依赖
VC++ 运行库x86 与 x64 各装一份混装进程互相调用,缺一不可
OPC Core Componentsx86 与 x64 各装一份只装一份是最高频的翻车点
安装账号本地管理员注册 COM 组件必须有写注册表权限
防火墙本地回环放行跨机才需要额外开端口

表里最后两行最容易被忽略。很多人拿普通用户账号装,装完界面能开,一注册 dll 就0x80070005,然后开始怀疑包有问题。注册 COM 组件本质是往HKEY_CLASSES_ROOT写数据,这个动作对权限很挑。

2.2 依赖组件清单:OPC Core Components 要先于客户端装

OPC DA 客户端要跟服务端通信,靠的不是一个 exe 包打天下,而是一组公共组件。它们负责两件事:一是把 COM 调用从客户端进程编组过去(代理与存根),二是让客户端能枚举出本机和网络上有哪些服务端在跑(枚举服务)。这组文件通常不随客户端包一起附带,得单独装一份官方分发的运行库。

判断装没装,看两个地方就够:

# 1. 看枚举服务是否注册在系统里 Get-Service -Name 'OPCEnum' -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType # 2. 看代理与存根文件在 32 位和 64 位目录下是否都存在 $files = 'opcproxy.dll','opccomn_ps.dll','opc_aeps.dll','opchda_ps.dll' foreach ($f in $files) { foreach ($dir in 'System32','SysWOW64') { $p = Join-Path $env:WINDIR "$dir\$f" [PSCustomObject]@{ File = $f; Path = $p; Exists = Test-Path $p } } }

第一段如果返回空,说明枚举服务压根没注册,后面浏览服务端列表必然是空的。第二段会列出八个组合,正常情况下System32和SysWOW64下应该都有对应文件。常见情况是只装了 32 位那份,SysWOW64有文件、System32没有——这种环境下 32 位客户端能用,换成 64 位客户端立刻抓瞎。

提示:这组公共组件的版本要和操作系统位数匹配,32 位和 64 位是两份独立的安装包,不是一次安装给你全铺好。装之前先确认手上有两份。

如果机器上已经有别的 OPC 软件在跑,别急着覆盖安装。先记下当前的枚举服务状态和组件文件清单,装完再对比,出了问题是哪一步弄坏的能一眼看出来。这个习惯在共享环境的现场特别值钱。

2.3 账号与权限基线:别用受限用户装

安装账号这件事,讲起来啰嗦,翻车率却奇高。OPC DA 的权限模型叠了两层:一层是 Windows 的 UAC,一层是 DCOM 的访问控制。受限用户装完能开界面,是因为界面只读了几项用户配置;等它去注册组件、写HKCR分支、改 DCOM 安全描述符的时候,全部被拒。

动手前先确认自己是管理员且提权生效:

# 判断当前会话是否已提权 $id = [Security.Principal.WindowsIdentity]::GetCurrent() (New-Object Security.Principal.WindowsPrincipal $id).IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator)

返回True才继续。返回False的时候,右键“以管理员身份运行”重开终端,而不是硬着头皮往下装——用未提权会话装的组件,注册表项会写到用户级分支,卸载时残留还清不干净。

还有两处系统策略最好一并调掉,尤其是跨机连服务端的场景:

# 关闭空密码账号仅限控制台登录的限制,避免服务端账号无密码时被拒 # 关闭本地账号共享模型限制,走“经典”模式 $lsa = 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' Get-ItemProperty $lsa -Name LimitBlankPasswordUse, ForceGuest | Select-Object *

LimitBlankPasswordUse为 1 时,空密码账号无论本地还是远程都会被拦;ForceGuest为 1 是强制来宾模式,DCOM 调用会降级成匿名身份,权限判断直接失败。改完这两项要重启生效,别改完立刻去点连接,白等一轮。

3. 解压与安装 OPC-Client-X64:从 rar 包到可执行程序

环境对完了,可以碰包了。这一步的关键不是点安装向导,而是把解压路径、安装方式、组件注册三个决定做好,做错任何一个,后面排查要多花两小时。

3.1 解压路径与字符处理:中文和空格是第一道坎

OPC-Client-X64.rar是压缩包,新系统自带的解压能力对 rar 支持不完整,右键“全部解压缩”很可能直接失败或者解出空目录。用能处理 rar 的第三方解压工具,别在这一步省事。

路径选短、纯英文、不带空格。原因很实在:这类客户端在注册组件时会把自身路径写进注册表,路径里带空格或中文,regsvr32加载模块时解析出错,报“找不到指定模块”,你看着文件明明就在那儿。

# 先建目标目录,再解压进去 New-Item -ItemType Directory -Path 'D:\OPCClient' -Force # 解压后确认文件确实落了地,别只看窗口一闪而过 Get-ChildItem 'D:\OPCClient' -Recurse | Select-Object FullName, Length | Sort-Object FullName

-Force让目录已存在时不报错;第二步那行别跳过,rar 包解压失败时往往不弹错,只是目录空着。文件清单里重点确认主程序 exe、若干 dll、配置文件、示例点位表这几类东西在不在。

按经验,解压出来大概是这样一组文件,先认识一下再动手:

文件/目录作用安装时要怎么处理
主程序 exe客户端界面入口建快捷方式,设“以管理员身份运行”
opcproxy.dll / opccomn_ps.dll代理与存根按位数分别注册
ini 或 xml 配置服务端列表、默认 ProgID按现场改,别用示例值
示例点位表离线调试用的 Tag 清单只读,别改
说明文档参数含义、变更记录只读,看版本差异

解压完别急着双击主程序。先确认解压目录没有被安全软件实时扫描锁住,某些环境下 dll 刚落地就被隔离,主程序起来报“加载组件失败”,查半天查不到原因。真要遇到,把目录加进白名单再重解一次。

3.2 两条安装路线:安装向导与绿色部署

这个包可能带安装向导,也可能是绿色版,两条路线的处理不一样,先看清楚再动手。

如果里面有setup.exe或install.exe:右键,以管理员身份运行,一路下一步。留意安装向导中间那几页勾选项——是否注册 OPC 组件、是否创建开始菜单项、是否安装示例配置。第一次装建议全部勾上,装完跑通再回头精简,别一上来就自定义。

如果是绿色版目录结构:不需要安装,但等价动作一个都不能少。

# 进入解压目录 Set-Location 'D:\OPCClient' # 给主程序建一个快捷方式,属性里勾上“以管理员身份运行” $ws = New-Object -ComObject WScript.Shell $lnk = $ws.CreateShortcut("$env:USERPROFILE\Desktop\OPC Client.lnk") $lnk.TargetPath = 'D:\OPCClient\OPCClient.exe' $lnk.WorkingDirectory = 'D:\OPCClient' $lnk.Save()

WorkingDirectory那行必须设,很多老式程序按相对路径读同目录下的配置文件,缺了这行会去系统目录找配置,结果自然是“配置不存在”。主程序要不要强制管理员运行,看现场:只做本地回环测试可以不设,要连别的机器上的服务端就设上,省得每次手动提权。

3.3 手工注册组件:regsvr32 的 32/64 位分岔

这一步是整套安装里最容易翻车的地方,也是 64 位客户端能不能调通 32 位服务端的关键。系统里有两个regsvr32.exe,一个 64 位、一个 32 位,注册的动作写进哪个注册表分支,完全取决于你调的是哪一个。调错了不会报错,只是注册到另一个分支,客户端照样找不到。

# 注册 64 位组件:用 System32 下的 regsvr32 $r64 = "$env:WINDIR\System32\regsvr32.exe" & $r64 /s "$env:WINDIR\System32\opcproxy.dll" & $r64 /s "$env:WINDIR\System32\opccomn_ps.dll" # 注册 32 位组件:用 SysWOW64 下的 regsvr32 $r32 = "$env:WINDIR\SysWOW64\regsvr32.exe" & $r32 /s "$env:WINDIR\SysWOW64\opcproxy.dll" & $r32 /s "$env:WINDIR\SysWOW64\opccomn_ps.dll" # 注册完查一遍返回值,0 表示成功 $LASTEXITCODE

参数解释一下:/s是静默模式,不弹成功提示框,适合批处理;去掉/s会弹窗告诉你成功还是失败,第一次装建议先不加,看清楚再批量跑。/u是反注册,卸载或换版本时用。/i配合参数可以做安装式注册,一般用不上。

失败时看什么,按错误码分:

返回码/提示含义处理方向
0x80070005拒绝访问提权,重开管理员终端
0x8007007E找不到指定模块依赖 dll 缺失,先补 VC++ 运行库
0x80020009发生异常位数不匹配,换另一个 regsvr32
找不到 DllRegisterServer入口点缺失这个 dll 不是自注册组件,别硬注册

最后一行值得单独说:不是所有 dll 都需要regsvr32,有的只是普通依赖库,硬注册必然报“找不到 DllRegisterServer 入口点”。看到这个提示先别慌,确认一下这个文件是不是本来就该由安装向导处理。

4. DCOM 与权限配置:让 OPC DA 客户端真正“看得见”服务端

组件注册完,客户端进程已经能加载 COM 相关的类了,但能不能连上服务端,还要过 DCOM 这一关。OPC DA 的所有读写都走 DCOM 调用,DCOM 的默认属性、默认安全、目标服务端的安全描述符,三处任何一处不对,都会以“拒绝访问”或“RPC 服务器不可用”的形式反馈给你。

4.1 dcomcnfg 里的三处默认配置

打开组件服务管理器:

# 打开组件服务 & dcomcnfg.exe

界面里依次展开“组件服务 → 计算机 → 我的电脑”,右键属性,重点改三页:

默认属性页:勾上“在此计算机上启用分布式 COM”,默认身份验证级别选“连接”或“无”,默认模拟级别选“标识”。身份验证级别选太高(比如“数据包加密”),对端老服务端可能协商失败,报 RPC 调用失败。选“无”最宽松,现场调试阶段常用,跑通后再收紧。

默认协议页:确认“面向连接的 TCP/IP”在列表里且排第一。缺了这条,跨机调用直接起不来。

COM 安全页:三组权限——访问权限、启动和激活权限、配置权限。默认值通常是空的,只有系统账号。至少要把Everyone或ANONYMOUS LOGON加进访问权限和启动权限,给“本地访问”“本地启动”“本地激活”三项。

# 用命令行确认 DCOM 是否已启用,避免界面点漏 $dcom = 'HKLM:\SOFTWARE\Microsoft\Ole' Get-ItemProperty $dcom -Name EnableDCOM, EnableRemoteConnect | Select-Object EnableDCOM, EnableRemoteConnect

EnableDCOM应该是Y。如果是N,说明这台机器的 DCOM 被策略或安全加固工具关掉了,界面上改了也会被策略刷回去,得先找策略层。

4.2 目标服务端的 DCOM 三项权限

上面改的是“本机默认”,真正要对的是具体那个 OPC DA 服务端。在组件服务里展开“DCOM 配置”,找到服务端对应的 ProgID 项,右键属性,四页挨个看:

  • 常规页:身份验证级别跟默认值保持一致,别一个“无”一个“数据包完整性”。
  • 位置页:勾“在此计算机上运行应用程序”。如果服务端在别的机器上,这里是本机配置里对应远程项的那份,逻辑一样。
  • 安全页:三处都选“自定义”,然后编辑。启动和激活权限加Everyone,给本地启动、本地激活;访问权限加Everyone,给本地访问;配置权限加管理员组。
  • 标识页:选“交互式用户”最省事,但要求服务端进程有桌面会话;服务器上跑的服务端一般选“下列用户”,填一个有本地登录权限的账号。
# 改完权限刷新一下 DCOM 配置缓存,省得反复重启 # 注意:这一步会短暂影响本机所有 COM 调用,别在生产高峰做 Restart-Service -Name 'DcomLaunch' -Force -ErrorAction SilentlyContinue

对DcomLaunch做重启在部分系统上会被拒绝,属于正常现象,不成功就重启机器,别在这上面反复纠缠。权限没生效的典型表现是:配置里明明加了Everyone,客户端连上去还是0x80070005,八成是改完没刷新。

注意:给Everyone开放 DCOM 权限是调试期的临时手段。现场环境确认能连通后,应该收窄到具体账号,别把这套配置原样带到长期运行的生产机上。

4.3 防火墙与 RPC 动态端口

本机回环测试一般不受防火墙影响,跨机就必须处理。DCOM 走的是 RPC,先连 135 端口找端点映射,再由映射服务分配一个动态端口做实际通信。只开 135 不开动态端口段,表现就是“能连上但一会儿断”。

# 放行 RPC 端点映射端口 New-NetFirewallRule -DisplayName 'OPC DA RPC EPM' -Direction Inbound ` -Protocol TCP -LocalPort 135 -Action Allow # 把 RPC 动态端口范围收窄,方便一次性放行 netsh int ipv4 set dynamicport tcp start=5000 num=1000 # 放行收窄后的端口段 New-NetFirewallRule -DisplayName 'OPC DA RPC Dynamic' -Direction Inbound ` -Protocol TCP -LocalPort 5000-5999 -Action Allow

start=5000 num=1000的意思是动态端口从 5000 开始,连续分配 1000 个。默认范围是 1024 到 65535,全放行太重,收窄到一段再放行是常见做法。改完端口范围要重启相关服务或重启机器,已建立的连接不会自动迁移。

跨机场景还有个隐性坑:主机名解析。客户端填的是机器名,解析不到就报0x800706BA,看着像防火墙问题,其实是 DNS 或 hosts 没配。先在客户端上ping和Test-NetConnection确认目标可达,再去查防火墙。

4.4 本地安全策略的两处开关

有些系统加固模板会把匿名访问彻底关掉,DCOM 的初始协商阶段会用到匿名身份,一刀切会让连接在第一步就断。

# 查看当前值 secedit /export /cfg $env:TEMP\secpol.cfg /quiet Select-String -Path $env:TEMP\secpol.cfg -Pattern 'RestrictAnonymous','LimitBlankPasswordUse'

RestrictAnonymous为 1 时,匿名连接被限制,DCOM 协商容易失败;改 0 再测。LimitBlankPasswordUse前面提过,空密码账号场景要调。改完执行secedit /configure回灌策略或直接重启,别只改注册表就跑。

5. 排查清单:OPC DA 客户端 4 个高频报错的处理路径

装完、配完,第一次连接大概率不会一次成功。这一章按“现象 → 原因 → 解决”整理四类高频情况,都是在现场反复遇到的,按顺序对号入座能省不少时间。

5.1 0x80040154 类未注册:64 位进程找错了注册表分支

现象:客户端打开正常,浏览服务端列表为空,手动输入 ProgID 连接时报0x80040154,错误描述是“没有注册类”。

原因:64 位客户端进程查的是 64 位注册表分支,服务端的 ProgID 却注册在Wow6432Node下——因为服务端是 32 位程序。两边各查各的,永远碰不上。也可能是 64 位那份 OPC 公共组件压根没装,代理存根缺失,跨进程编组直接失败。

解决:先确认服务端的 ProgID 在哪一侧:

# 在 64 位分支下找 Get-ChildItem 'HKLM:\SOFTWARE\Classes' -ErrorAction SilentlyContinue | Where-Object PSChildName -like '*OPC*' | Select-Object PSChildName # 在 32 位分支下找 Get-ChildItem 'HKLM:\SOFTWARE\Classes\Wow6432Node' -ErrorAction SilentlyContinue | Where-Object PSChildName -like '*OPC*' | Select-Object PSChildName

如果只在Wow6432Node下出现,说明是 32 位服务端,64 位客户端要能调它,必须把 64 位的代理存根装齐并注册,让跨进程的编组有桥可走。补装 64 位公共组件、按 3.3 的命令重新注册一遍,然后重启客户端进程——注意是重启进程,不是重开窗口,COM 类缓存不清会一直读到旧状态。

5.2 0x80070005 拒绝访问:DCOM 权限和 UAC 一起背锅

现象:能枚举到服务端,点连接就报拒绝访问,事件查看器里能看到 DCOM 相关的安全日志。

原因:DCOM 的访问权限、启动和激活权限没给到调用方身份,或者调用方是以未提权的中等完整性级别在跑。两个原因叠加时最难受:表面权限看起来是对的,实际调用是以受限令牌发出的。

解决:分两步查。先确认客户端进程是否以管理员身份运行,任务管理器里看进程的“特权”标识。再查 DCOM 安全日志:

# 拉最近的 DCOM 安全事件 Get-WinEvent -LogName System -MaxEvents 200 | Where-Object { $_.ProviderName -like '*DistributedCOM*' -or $_.Id -eq 10016 } | Select-Object TimeCreated, Id, Message -First 10

事件 ID 10016 是典型的权限不足,消息里会写明是哪个 CLSID、哪个账号缺哪项权限,直接照着消息补,比自己猜快得多。补完权限重启DcomLaunch或重启机器。

5.3 0x800706BA RPC 服务器不可用:先分清是网络还是服务

现象:连接远程服务端时报0x800706BA,有时第一次能连、过一会儿断。

原因:可能性按概率排——目标机器名解析失败、防火墙拦了动态端口、目标服务端进程没起、RPC 服务停了。第一次能连后断,多半是动态端口没放行,握手端口通了但数据通道被拦。

解决:按链路上从下往上查:

# 1. 解析 Resolve-DnsName 'TARGET-HOST' -ErrorAction SilentlyContinue # 2. 端点映射端口 Test-NetConnection -ComputerName 'TARGET-HOST' -Port 135 # 3. 动态端口段 Test-NetConnection -ComputerName 'TARGET-HOST' -Port 5000 # 4. 本机 RPC 相关服务 Get-Service RpcSs, RpcEptMapper | Select-Object Name, Status

第 1 步解析不出来,直接配 hosts 或用 IP,别再往下查。第 2 步不通,查防火墙入站规则。第 3 步不通而第 2 步通,就是动态端口段没放行,回去看 4.3。全通还报错,去目标机器上看服务端进程在不在,Get-Process找一下对应进程名。

5.4 能浏览不能读点位:ItemID 与命名空间差异

现象:服务端能枚举、能连上,也能看到分组和标签树,但读值全是Bad或者空。

原因:ItemID 大小写敏感、路径分隔符不一致、命名空间前缀没带。不同服务端对 ItemID 的规范不一样,有的要求带完整路径,有的只认短名。另外模拟量点位在服务端要处于有效状态,服务端没开仿真或者设备没连上,读出来就是Bad。

解决:先用服务端自带的浏览功能把完整 ItemID 复制出来,别手敲。客户端里新建测试项时把返回的质量码打出来看:

# 读点位时把质量戳一起记录,Bad 和 Uncertain 要分开看 # 质量码:Good=192, Uncertain=64, Bad=0(具体取值以工具文档为准)

质量码全Bad且服务端浏览正常,问题在服务端侧的连接状态,不在客户端;质量码Uncertain多半是设备通信抖动,跟 OPC 客户端配置无关。这两类要分开处理,混在一起排查会绕远路。

6. 装完怎么验证:用一次本地回环把链路跑通

装完不等于通了。我习惯的做法是先不连现场服务端,在本机做一次闭环验证,把“组件注册 → DCOM → 枚举 → 读写”这条链路单独跑一遍。本机自测通过了,再去连远程,出问题就能确定是网络或对端的事,范围一下缩小一半。

验证分三步,每步都有明确的通过标准:

验证项命令或操作通过标准
枚举服务Get-Service OPCEnumStatus 为 Running,StartType 不是 Disabled
组件注册3.3 的注册命令,看$LASTEXITCODE全部返回 0
服务端可见客户端里浏览本机服务端列表里能看到至少一个 ProgID
读取点位连上后读一个静态 Tag质量码为 Good,值稳定不跳

第一步如果服务没起来,先手动拉一次再设成自动:

# 启动并设为自动,确保重启后还在 Set-Service -Name 'OPCEnum' -StartupType Automatic Start-Service -Name 'OPCEnum' Get-Service -Name 'OPCEnum' | Select-Object Name, Status, StartType

Set-Service改的是启动类型,Start-Service是本次拉起,两条一起用。有的环境里枚举服务是以控制台程序形式存在的,没注册成服务,那就得用它的安装参数先注册再启动,别直接拿 exe 双击——双击起来的进程在会话结束后就没了。

第三步和第四步在客户端界面里做操作,没有命令可抄,但有判断技巧:浏览列表里能看到服务端但连不上,问题在 DCOM;连上了但读不到点位,问题在服务端侧的设备连接或者 ItemID 写法;浏览列表压根是空的,回到 5.1 查位数和注册表分支。这三个分支对应三套排查路径,比“连不上就重装”高效得多。

最后补一个我自已的习惯:整套环境装完、验证通过之后,把当时的状态固化下来——注册了哪几个 dll、DCOM 三页权限怎么设的、防火墙开了哪些端口、动态端口范围改成了多少,全部记在一个文本文件里,跟安装包放一起。下次换机器或者重装,照着这份记录走,半小时能复现;没这份记录,光回忆 DCOM 那三页怎么点的就得花一下午。从那以后我每次装这类 OPC DA 客户端,都会在验证通过的第一时间把这份“环境快照”写下来,踩过的坑基本就不会再踩第二遍。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询