ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ChemCAD二次开发教程(02):环境盘点——安装布局、许可机制与自动化前置条件

ChemCAD二次开发教程(02):环境盘点——安装布局、许可机制与自动化前置条件 ChemCAD二次开发教程02环境盘点——安装布局、许可机制与自动化前置条件版本与事实声明版本锚点CHEMCAD NXT 1.1.3.181692025-01-20/ Web 版 1.1.3.18179CHEMCAD 8 1.1.2.180022024-06-26CHEMCAD 7 终版 7.1.8.136422020-01-28。当前版本以官方发行说明为准。许可类型的具体名称、期限与价格以 Datacor / CHEMCAD 官方渠道为准本篇只讲机制与工程影响不写数字。本篇所有注册表项路径均为 Windows 公开标准位置CHEMCAD 自身的自动化入口名ProgID/类名在公开渠道未确证脚本只做枚举与登记不做断言。文中任何工艺数值均为示例性建模不代表任何标准规定。一句话结论CHEMCAD 二次开发的成败在第一行代码之前就决定了——必须先把版本与模块VB/COM/OPC/Data Map 只在 CC-STEADY STATE 与 CC-DYNAMICS、Sentinel 许可机制、VBA 组件是否安装、Excel 与 Python 位数是否匹配、CC-API 的 .NET 前置CHEMCAD 7 VS2013 .NET Framework 4.5五项登记成一份环境清单本篇的注册表采集脚本就是这份清单的自动化起点。〇、本篇要解决的认知问题Q1CHEMCAD 的安装与运行前置有哪些官方给首次使用列了哪几步Q2CHEMCAD 的许可机制是什么为什么许可问题在自动化里会以各种奇怪报错的形式出现Q3为什么Excel 与 Python 位数比你想的重要得多Q4走 CC-API 路线时官方规定的最低环境是什么为什么这三条是硬门槛Q5一份合格的环境清单应该包含哪些字段为什么它能省掉后面 18 篇的大半排查时间一、机制解析1.1 官方给的首次使用路径User Guide 第 2 章 “Getting Started with CHEMCAD” 给出的顺序是创建用户支持中心账号Creating a User Support Center Account下载软件Downloading the Software安装软件Installing the software许可 CHEMCADLicensing CHEMCAD——其中包含许可类型Types of CHEMCAD Licenses、“许可设置License Settings”、更新许可Updating a License三个子节获取帮助Getting Help——在线帮助、Chemstations 网站、联系技术支持。为什么这对你重要这五步里有三步账号、下载、许可都在支持门户内完成而更详细的自动化文档同样位于订阅制门户。这意味着二次开发者的第一课不是写代码而是把账号与许可通道打通——否则你会一直停留在网上能搜到的公开资料层面而看不到COM Interfaces章节的细节。1.2 版本盘子三代的定位差异底账登记的版本锚点构成我们讨论兼容性的坐标系代版本锚点对你的意义CHEMCAD NXT安装包 1.1.3.181692025-01-20Web 访问版 1.1.3.18179当前代NXT 提供本地部署与 Web 访问两种交付CHEMCAD 81.1.2.180022024-06-26上一交付线官方发行说明里出现过introduced with version 8.0.0/1.0.0说明 8 与 NXT 1.x 是同一条演进的版本线CHEMCAD 7终版 7.1.8.136422020-01-28兼容性起点CC-API 的最低要求就是 CHEMCAD 7也是大多数存量教学机与中小项目的实际环境另有一条历史线CHEMCAD 6在发行说明中可查主要用于理解版本迁移这件事User Guide 第 4 章专门有一节Working with CHEMCAD Files from Previous Versions。流程文件是跨版本兼容的主要风险点这与 CC-API 异常体系里专门存在ChemcadAndFlowsheetVersionsDoNotMatchException是同一件事的两面。为什么这对你重要教学与中小项目里新装的 NXT和五年前装的 CHEMCAD 7往往同时在用。二次开发的第一份清单里版本必须写到构建号如 7.1.8.13642因为同一大版本的不同构建之间也可能有行为差异。1.3 许可机制与它的工程后果官方把许可相关工作拆成许可类型 / 许可设置 / 更新许可三节并在各代支持页提供三类网络组件下载Sentinel Protection Installer、Sentinel RMS License Manager Installer、RMS Administrative Tools。这告诉我们两件事许可是独立于 CHEMCAD 安装程序的一套组件可以单独装、单独升级、单独排障存在**网络许可network license**形态配套有 RMS 许可管理器与管理员工具。官方发行说明里还能看到许可相关的真实工程痕迹CHEMCAD 7.1.3 修正过commuter licenses 的初始化问题7.1.8 修正过非 seat 许可在近期 CHEMCAD 7 版本下可能被禁用的问题CHEMCAD 6 时期把 System Authorization 的授权对象从按用户改为按计算机。为什么这对你重要把二次开发脚本交给计划任务无人值守运行时许可获取失败是最常见的半夜静默失败。一个健壮的脚本必须在启动阶段就把许可是否可用作为前置断言并给出可读的错误第 17 篇的状态机会用到这一点。1.4 三个隐形前置条件(1) VBA 组件是可选的。官方在 NXT 1.1.1 增加了安装时跳过 VBA 安装的能力并列出一条修复“Corrected an issue where CHEMCAD could close unexpectedly when VBA is not available”。也就是说不装 VBA 是官方支持的合法配置此时与 VBA 相关的自动化面完全不存在。反过来教学材料里点开界面底部的 Visual Basic 标签页这一步前提是装了 VBA。(2) 位数必须匹配。官方在 CHEMCAD 7.1.0 明确做过Enhanced CHEMCAD’s Excel tools to work with64-bit Excel说明位数问题是真实痛点。COM 互操作中32 位客户端与 64 位服务端之间的跨进程调用、以及 Excel 加载项/自动化对象的位数一致性都会以晦涩错误呈现。Python 解释器位数、Excel 位数、加载项位数三者要对齐。(3) CC-API 的三条硬门槛。官方 minimum-requirements 页面给出的最低要求是CHEMCAD 7、Visual Studio 2013 或以上、.NET Framework 4.5 或以上推荐直接使用最新版 CHEMCAD、Visual Studio 与 .NET Framework。这三条正好对应三类失败版本不够 → 类库里某些成员调用失败或流程文件不兼容触发版本不匹配类异常编译器过旧 → 无法引用目标框架的类库.NET Framework 过旧 → 运行时直接加载失败。为什么这对你重要这三条全部与代码无关但全部能让你在调试器里浪费一天。把它们写进环境清单等于把一天的排查时间前置成五分钟的核对。1.5 环境清单二次开发的出发前检查单一份合格的清单应该字段化、可复核、可交接。建议字段如下本篇代码 2-2 会自动生成这个模板字段取值来源为什么必须记录产品与构建号关于对话框 / 安装信息版本不匹配类问题的第一依据交付形态本地部署 / Web 访问NXT 支持两者Web 访问下桌面自动化的可行性完全不同已授权模块许可信息 / 产品模块列表决定 VB/COM/OPC/Data Map 是否存在铁律 1许可机制本地 / 网络RMS/ 其它决定无人值守时的失败模式VBA 组件安装选项 / 界面标签页决定第 09/10 篇能否落地Excel 位数与版本Excel 关于对话框与 Python/加载项位数必须对齐Python 位数与路径sys.version/sys.executable多版本共存时最易踩的坑.NET Framework / VSVS 安装器 / 系统组件CC-API 的硬门槛数据目录与临时目录WorkingDirectory 概念批量任务的中间文件落点第 17 篇二、完整代码与逐行剖析代码 2-1本机 CHEMCAD 生态痕迹采集Python winregWindows 可运行# -*- coding: utf-8 -*- survey_chemcad_env.py —— 采集本机 CHEMCAD / Datacor / Sentinel 的安装与组件痕迹 只做枚举与登记不对任何 ProgID 下结论那是第 05 篇的探测任务。 运行python survey_chemcad_env.py importjsonimportplatformimportstructimportsysifplatform.system()!Windows:print(本脚本用于 Windows 注册表枚举CHEMCAD 桌面自动化仅 Windows 可跑。)sys.exit(2)importwinreg# 仅 Windows 提供# 用于子串匹配的关键词厂商名 产品名 已知同族组件名。# 注意这里刻意多撒网因为同族产品许可组件等的注册项名称与产品名并不一致。KEYWORDS[cheMCAD,chemstations,datacor,sentinel,xchanger,chemcad]# 采集范围卸载信息安装痕迹 核心注册表根自动化/文件关联痕迹UNINSTALL_ROOTS[(winreg.HKEY_LOCAL_MACHINE,rSOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall),(winreg.HKEY_LOCAL_MACHINE,rSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall),]CLASS_ROOTS[(winreg.HKEY_CLASSES_ROOT,),# ProgID / CLSID 命名空间(winreg.HKEY_LOCAL_MACHINE,rSOFTWARE\Classes),]defiter_subkeys(root,path):安全地遍历子键权限不足或路径不存在时返回空列表而不是抛异常。try:withwinreg.OpenKey(root,path)askey:i0whileTrue:try:yieldwinreg.EnumKey(key,i)i1exceptOSError:breakexceptOSError:returndefhit(name):lowname.lower()returnany(kinlowforkinKEYWORDS)defscan_uninstall():从卸载信息里提取安装痕迹显示名、版本、安装位置。found[]forroot,pathinUNINSTALL_ROOTS:forsubiniter_subkeys(root,path):try:withwinreg.OpenKey(root,path\\sub)askey:info{}foriinrange(winreg.QueryInfoKey(key)[1]):n,v,_winreg.EnumValue(key,i)info[n]v dispstr(info.get(DisplayName,))ifhit(disp)orhit(sub):found.append({DisplayName:disp,DisplayVersion:str(info.get(DisplayVersion,)),InstallLocation:str(info.get(InstallLocation,)),Publisher:str(info.get(Publisher,)),Key:sub,})exceptOSError:continuereturnfounddefscan_classes(limit200):粗扫 HKCR登记与关键词命中的子键名仅登记名称不解析其值。names[]forroot,pathinCLASS_ROOTS:forsubiniter_subkeys(root,path):ifhit(sub):names.append(sub)iflen(names)limit:returnnamesreturnnamesdefmain():bitsstruct.calcsize(P)*8report{machine:{os:f{platform.system()}{platform.release()},python_version:sys.version.split()[0],python_bits:bits,python_exe:sys.executable,},installed:scan_uninstall(),class_names_hit:scan_classes(),}print(json.dumps(report,ensure_asciiFalse,indent2))print(\n提示)print( 1) installed 段用于确认版本与安装位置构建号请在 CHEMCAD 内核对本脚本只读注册表。)print( 2) class_names_hit 只是命中清单不是 ProgID 结论——真正的类型库探测在第 05 篇。)print( 3) 许可相关信息多半不在卸载信息里请到许可管理器/管理员工具中单独登记。)if__name____main__:main()逐行剖析import winreg放在平台判断之后让脚本在非 Windows 上给出明确提示而不是抛ImportError这是检查工具的脚本比业务脚本更要抗造的延续。KEYWORDS里刻意放入datacor、sentinel厂商更名后注册项不会同步改名——老机器的痕迹可能仍是 “Chemstations”新一代支持组件是 “Datacor”许可组件是 “Sentinel”。这也是本系列反对猜名字的又一个理由你以为在找一个名字其实要找的是三代名字的集合。UNINSTALL_ROOTS同时覆盖 64 位与WOW6432Node两处32 位程序的安装信息在 64 位系统上位于WOW6432Node下。只查一处会得出没装的错误结论。iter_subkeys中的while True / EnumKey / OSError结构注册表遍历没有长度API必须靠异常终止——这是 Windows 注册表 API 的公开行为不是取巧。scan_classes(limit200)只登记键名、不读值这一版的目的是看到有哪些名字存在不是断言哪个是自动化入口。把枚举与断言分在两篇第 02 篇 vs 第 05 篇是本系列证据分级落到代码上的具体做法。输出用json.dumps(..., indent2)清单要能被后续脚本机器读取第 19 篇的平台化会直接消费这份 JSON人看的清单和机器读的清单最好是同一份。结尾三条提示把已知/未知边界写在脚本里脚本诚实地告诉使用者许可信息我读不到请手工补。一个敢说我读不到的自检脚本比一个假装什么都知道的脚本可信得多。代码 2-2环境清单模板生成器Python可直接运行# -*- coding: utf-8 -*- make_env_checklist.py —— 生成 CHEMCAD 二次开发环境清单Markdown 把已知项自动填入把必须人工确认的项留成 TODO避免清单看起来填满了其实没核。 运行python make_env_checklist.py # 在当前目录生成 环境清单.md importdatetimeimportpathlibimportplatformimportstructimportsys TEMPLATE# CHEMCAD 二次开发环境清单 生成时间{now} 本清单是二次开发的前置证据。**每一项都必须有取值来源**写不出来源的项等于没核。 ## 1. 运行平台 | 字段 | 取值 | 来源 | |---|---|---| | 操作系统 | {os} | 本脚本自动 | | Python 版本 | {pyver} | 本脚本自动 | | Python 位数 | {pybits} 位 | 本脚本自动 | | Python 路径 | {pyexe} | 本脚本自动 | ## 2. CHEMCAD 本体 | 字段 | 取值 | 来源 | |---|---|---| | 产品代次NXT / 8 / 7 / 6 | TODO | 关于对话框 | | 构建号写到构建位 | TODO | 关于对话框例7.1.8.13642 | | 交付形态本地部署 / Web 访问 | TODO | 安装与交付方式 | | 已授权模块清单 | TODO | 许可信息CC-STEADY STATE / CC-DYNAMICS / ... | | **是否含 CC-STEADY STATE 或 CC-DYNAMICS** | TODO | **决定 VB/COM/OPC/Data Map 是否存在铁律 1** | | 数据/工作目录 | TODO | 安装配置 | ## 3. 许可 | 字段 | 取值 | 来源 | |---|---|---| | 许可机制本地 / 网络 RMS / 其它 | TODO | 许可管理器 | | Sentinel 组件版本 | TODO | Sentinel Protection Installer / RMS 安装记录 | | 许可到期日 | TODO | 许可信息**不在此处记录任何密钥** | ## 4. 脚本能力面 | 字段 | 取值 | 来源 | |---|---|---| | VBA 组件是否安装 | TODO | 安装选项 / 界面底部是否有 Visual Basic 标签页 | | Excel 版本 | TODO | Excel 关于对话框 | | Excel 位数 | TODO | Excel 关于对话框**须与 Python 位数对齐** | | .NET Framework 版本 | TODO | 系统组件 / VS 安装器 | | Visual Studio 版本 | TODO | 若走 CC-API 路线则必填最低 VS2013 | | CC-API 是否已授权 | TODO | cc-api.com 官方渠道 | ## 5. 结论与选择 | 决策 | 取值 | 依据 | |---|---|---| | 首选通道 | TODO | 第 01 篇通道决策表 本清单第 2/4 节 | | 备用通道 | TODO | 同上 | | 已知风险项 | TODO | 逐项写位数VBA许可版本 | ## 6. 修订记录 | 日期 | 变更 | 变更人 | |---|---|---| | {today} | 初版自动生成 | —— | defmain():nowdatetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S)todaydatetime.date.today().isoformat()textTEMPLATE.format(nownow,todaytoday,osf{platform.system()}{platform.release()},pyversys.version.split()[0],pybitsstruct.calcsize(P)*8,pyexesys.executable,)outpathlib.Path(环境清单.md)out.write_text(text,encodingutf-8)print(f已生成{out.resolve()})print(请逐项核对并填写取值来源第 2 节与第 4 节是后续 18 篇的通行证。)if__name____main__:main()逐行剖析模板里每个字段都配了来源列这是清单与聊天记录的区别。看不到来源的取值在三个月后的版本升级排障里毫无价值。“许可一节特意写不在此处记录任何密钥”本系列的硬性纪律——凭证、cookies、密钥绝不写入任何文件。清单要记录机制与到期日不要记录密钥本身。第 2 节把是否含 CC-STEADY STATE 或 CC-DYNAMICS单独加粗它是铁律 1 在文档层面的落点一次问清胜过写两周无效代码。pathlib.Path.write_text(..., encodingutf-8)显式 UTF-8是本系列所有落盘操作的标准动作避免中文在 Windows 默认 ANSI 下变成乱码。第 6 节留了修订记录环境清单是活文档。CHEMCAD 升级例如从 7 升到 NXT后构建号、位数兼容性、Excel 工具行为都可能变化清单要能反映这种演进。代码 2-3用 CC-API 做运行时断言C#需引用 CC-API// EnvAssert.cs —— 在程序启动阶段就把版本/许可/工作目录断言清楚// 这样第 17 篇的无人值守批量任务失败时日志第一行就说明白卡在哪usingSystem;usingCCAPI;usingCCAPI.Exceptions;classEnvAssert{staticintMain(){Serverservernull;try{servernewServer(licenseKey:YOUR-LICENSE-KEY);// 构造期即校验许可// 1) 断言版本文档描述 Version 属性为 Returns the current version of CHEMCADintverserver.Version;Console.WriteLine($[ASSERT] CHEMCAD Version {ver});// 2) 断言工作目录批量任务的中间文件落点必须明确// 文档描述 WorkingDirectory 为 Gets the working directory used by CHEMCAD可读写Console.WriteLine($[ASSERT] WorkingDirectory {server.WorkingDirectory});Console.WriteLine($[ASSERT] 工作目录中任务数 {server.GetNoOfJobsInWorkDirectory});Console.WriteLine([OK] 环境断言通过可以进入业务逻辑。);return0;}catch(ChemcadLicenseNotFoundExceptionex){// 许可类异常必须在日志里点名不要把无人值守失败埋在通用异常里Console.Error.WriteLine([FAIL] 许可不可用ex.Message);return2;}catch(CCAPIExceptionex){Console.Error.WriteLine([FAIL] CC-API 环境异常ex.Message);return3;}finally{if(server!null){try{server.Release();}catch{}}}}}逐行剖析ChemcadLicenseNotFoundException被单独 catch 并给独立退出码 2这是把 1.3 节的许可失败是半夜静默失败的头号来源变成可运维的设计。计划任务里用退出码区分许可问题/环境问题/业务问题运维一看即知第 17、19 篇会直接消费这套码。server.Version与WorkingDirectory的注释直接引用官方属性描述代码注释里保留官方原文是团队里最省事的防遗忘手段。GetNoOfJobsInWorkDirectory是文档中存在的属性描述同为工作目录相关用来观察工作目录里堆积了多少任务——批量任务的卫生指标。finally只调Release()、不调CloseSimulation()本段没有打开流程只需释放 COM。释放动作要与已获取的资源成对而不是无脑全调。三、常见报错与排查报错 3-1注册表采集脚本报没找到任何 CHEMCAD 痕迹但软件明明装着。现象installed段为空。根因三种常见情况——①只查了 64 位卸载键而安装在WOW6432Node下②关键词集合不全厂商已更名 Datacor老机器上是 Chemstations许可组件是 Sentinel③安装信息不在卸载信息里绿色部署/镜像分发。解法把KEYWORDS扩到包含厂商历史名与许可组件名并把两个卸载根都扫仍为空则直接查安装目录与许可管理器不要因为脚本没找到就断言没装。报错 3-2脚本能跑但一接入就报类未注册 / 无法创建对象。现象自检全绿正式调用失败。根因环境清单只登记了装了 CHEMCAD没登记装了哪些模块与客户端位数。VB/COM/OPC/Data Map 只在 CC-STEADY STATE 与 CC-DYNAMICS 中可用铁律 1位数不匹配同样会导致创建失败。解法回到清单第 2 节补全模块清单第 4 节补全位数对齐随后按第 05 篇做真正的类型库探测。报错 3-3CHEMCAD 在无人值守任务里半夜静默退出。现象白天手动跑正常计划任务里夜里失败日志只有一句泛泛错误。根因许可获取在无人值守上下文里失败网络许可不可达、许可被占用、非 seat 许可异常等而脚本没有把许可失败单独处理。解法照代码 2-3 的模式把ChemcadLicenseNotFoundException单独捕获并给独立退出码在任务启动前加一次许可可用性断言第 17 篇状态机的 pre-flight 阶段。报错 3-4Excel 相关工具时好时坏。现象同一模板在 A 机器能用、B 机器报错。根因Excel 位数与 Python/加载项位数不一致或 Excel 为不同版本/区域设置官方还修过匈牙利区域设置下 Excel 报告数字格式问题这类区域性 bug。解法统一位数在清单里登记 Excel 版本与位数区域设置差异导致的格式问题用显式数字格式而非依赖本地化默认值规避。报错 3-5CC-API 项目编译或加载失败提示找不到框架/类型。现象引用 CC-API 类库后编译报错或运行时FileNotFoundException。根因未满足官方最低要求——CHEMCAD 7 Visual Studio 2013 或以上 .NET Framework 4.5 或以上。解法逐项核对清单第 2、4 节官方推荐直接使用最新的 CHEMCAD、Visual Studio 与 .NET Framework避免在刚好卡在最低线的组合上消耗时间。四、动手练习练习 1采集与核对运行代码 2-1把输出保存为env_raw.json。判定文件中installed段至少命中 1 条 CHEMCAD/Datacor 相关记录若为 0请在笔记里写出你扩过的关键词集合与判断理由machine.python_bits有明确值。练习 2清单成稿运行代码 2-2逐项填写 TODO。判定第 2 节 6 个字段、第 4 节 6 个字段全部有取值且有来源是否含 CC-STEADY STATE 或 CC-DYNAMICS给出明确是/否第 5 节给出首选与备用通道并各附一句依据。练习 3断言脚本把代码 2-3 接到你自己的工程里或仅编译到能调用 Version/WorkingDirectory的程度。判定运行后 3 行[ASSERT]全部打印人为把licenseKey改为无效值后重跑判定程序以退出码 2 结束并打印[FAIL] 许可不可用且不产生残留 CHEMCAD 进程用任务管理器核对。练习 4思考题无标准答案拿你现在的目标场景回答一个问题——如果明天 CHEMCAD 升级到下一代我这套二次开发方案里哪一层最容易断给思考方向①版本不匹配类异常出现在流程文件层还是类库层②VBA 面的反应速率函数参数表是否受版本影响③UAM 的usradd.dll是否必须重编译提示铁律 5④位数/框架是否跟着变。五、小结与下一篇预告本篇把写代码之前要做什么变成了可执行的三件套采集注册表枚举多撒网、分枚举与断言两篇、成稿字段化、带来源、不记密钥的清单、断言在程序启动期就把版本/许可/工作目录说清楚并给独立退出码。三条前置你要带进后面 18 篇模块决定能力、位数必须对齐、许可失败要单独处理。第 03 篇《第一个稳态流程》我们回到 CHEMCAD 本体按官方第 5 章的工作流搭一个闪蒸—泵—分离三单元流程把结果三通道Charts/Reports Gallery、Consolidated Report、Excel 报告跑通为第 04 篇的取数纪律与第 06 篇的程序化读取准备一个稳定的靶子。FAQ与第〇节一一对应Q1CHEMCAD 的安装与运行前置有哪些官方给首次使用列了哪几步A官方 User Guide 第 2 章 “Getting Started with CHEMCAD” 列出五步创建用户支持中心账号、下载软件、安装软件、许可 CHEMCAD含许可类型、许可设置、更新许可三节、获取帮助在线帮助/官网/技术支持。此外各代支持页单独提供三类许可组件下载Sentinel Protection Installer、Sentinel RMS License Manager Installer、RMS Administrative Tools更详细的自动化文档位于订阅制用户门户。Q2CHEMCAD 的许可机制是什么为什么许可问题在自动化里会以各种奇怪报错的形式出现A许可由独立于主程序的一套组件承载Sentinel Protection / Sentinel RMS License Manager / RMS 管理工具并存在网络许可形态。官方发行说明里能看到许可相关的真实工程痕迹例如 7.1.3 修正 commuter licenses 初始化问题、7.1.8 修正非 seat 许可在近期版本下可能被禁用、CHEMCAD 6 把 System Authorization 的授权对象由按用户改为按计算机。因为许可在构造/启动阶段校验CC-API 的Server构造函数即校验许可无人值守运行时许可获取失败往往表现为进程静默退出或泛化异常所以必须像代码 2-3 那样单独捕获许可类异常并给独立退出码。Q3为什么Excel 与 Python 位数比你想的重要得多A因为 COM 互操作对位数敏感且官方专门为位数问题做过改进CHEMCAD 7.1.0 的 “Enhanced CHEMCAD’s Excel tools to work with 64-bit Excel”。32 位客户端与 64 位服务端不能在同一进程内加载同一类库跨进程调用的封送也对指针宽度敏感最终表现常是晦涩的类未注册/接口不可用而不是一句位数不匹配。正确做法是把 Python 位数、Excel 位数、加载项位数三者对齐并写入环境清单。Q4走 CC-API 路线时官方规定的最低环境是什么A官方 minimum-requirements 页面给出三条CHEMCAD 7或以上、Visual Studio 2013 或以上、.NET Framework 4.5 或以上并推荐直接使用最新版本的 CHEMCAD、Visual Studio 与 .NET Framework。这三条分别对应三类失败版本不足导致类库成员调用失败或流程文件不兼容会触发ChemcadAndFlowsheetVersionsDoNotMatchException这类异常、编译器过旧无法引用目标框架、.NET Framework 过旧导致运行时加载失败。Q5一份合格的环境清单应该包含哪些字段A至少六组①运行平台操作系统、Python 版本/位数/路径②CHEMCAD 本体产品代次、写到构建位的版本号、交付形态为本地部署或 Web 访问、已授权模块清单、是否含 CC-STEADY STATE 或 CC-DYNAMICS、工作目录③许可机制为本地/网络 RMS/其它、Sentinel 组件版本、到期日且不记录任何密钥④脚本能力面VBA 组件是否安装、Excel 版本与位数、.NET Framework 与 Visual Studio 版本、CC-API 是否授权⑤结论与选择首选通道、备用通道、已知风险项⑥修订记录。每个字段必须标注取值来源否则版本升级排障时无法追溯。
返回列表