diff --git a/Readme.md b/Readme.md index 9ec48f5..43c6a91 100644 --- a/Readme.md +++ b/Readme.md @@ -104,6 +104,14 @@ software: startup_timeout: 45 check_process_name: "acad.exe" + pdms: + name: "AVEVA PDMS 12.1 SP4" + executable_path: "C:\\AVEVA\\Plant\\PDMS12.1.SP4\\pdms.bat" + startup_args: ["Design", "noconsole"] + startup_timeout: 120 + check_process_name: ["des.exe", "PDMSConsole.exe"] + stop_timeout: 20 + # ... 其他软件配置 ``` diff --git a/check_pdms_processes.py b/check_pdms_processes.py new file mode 100644 index 0000000..49fdf79 --- /dev/null +++ b/check_pdms_processes.py @@ -0,0 +1,117 @@ +import sys +import asyncio +import psutil +sys.path.append('app') + +from core.process_monitor import process_monitor + +async def detect_pdms_processes(): + """检测PDMS相关的所有进程""" + print("=== PDMS进程检测工具 ===") + print("请确保PDMS已经启动,然后按任意键继续...") + input() + + print("\n正在扫描系统中的所有进程...") + + # 获取所有进程 + all_processes = [] + pdms_related_processes = [] + + try: + for proc in psutil.process_iter(['pid', 'name', 'create_time', 'cmdline']): + try: + proc_info = proc.info + all_processes.append(proc_info) + + # 查找可能与PDMS相关的进程 + process_name = proc_info['name'].lower() if proc_info['name'] else '' + cmdline_list = proc_info.get('cmdline') or [] + if not isinstance(cmdline_list, list): + cmdline_list = [] + cmdline = ' '.join(str(arg) for arg in cmdline_list).lower() + + # 检查进程名或命令行中是否包含PDMS关键词 + pdms_keywords = ['pdms', 'aveva', 'design', 'plant'] + + if any(keyword in process_name for keyword in pdms_keywords) or \ + any(keyword in cmdline for keyword in pdms_keywords): + pdms_related_processes.append({ + 'pid': proc_info['pid'], + 'name': proc_info['name'], + 'cmdline': cmdline_list, + 'create_time': proc_info['create_time'] + }) + + except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): + continue + + except Exception as e: + print(f"❌ 进程扫描失败: {e}") + return + + print(f"\n📊 扫描结果:") + print(f" 总进程数: {len(all_processes)}") + print(f" PDMS相关进程数: {len(pdms_related_processes)}") + + if not pdms_related_processes: + print("\n⚠️ 未找到PDMS相关进程!") + print(" 请确认:") + print(" 1. PDMS是否已正确启动") + print(" 2. 是否以正确的参数启动 (Design noconsole)") + return + + print(f"\n🔍 发现的PDMS相关进程:") + print("-" * 80) + for proc in pdms_related_processes: + cmdline_preview = ' '.join(str(arg) for arg in proc['cmdline'][:3]) if proc['cmdline'] else '' + print(f"PID: {proc['pid']:8} | 进程名: {proc['name']:20} | 命令行: {cmdline_preview}") + + # 分析最有可能的主进程 + print(f"\n🎯 进程分析建议:") + print("-" * 40) + + main_candidates = [] + for proc in pdms_related_processes: + name = proc['name'].lower() if proc['name'] else '' + cmdline_str = ' '.join(str(arg) for arg in proc['cmdline']).lower() if proc['cmdline'] else '' + + # 评分系统:更可能是主进程的得分更高 + score = 0 + if 'pdms' in name: + score += 10 + if 'design' in name: + score += 8 + if 'design' in cmdline_str: + score += 5 + if 'noconsole' in cmdline_str: + score += 3 + if len(proc['cmdline']) > 1: # 有参数的进程更可能是主进程 + score += 2 + + main_candidates.append((proc, score)) + + # 按分数排序 + main_candidates.sort(key=lambda x: x[1], reverse=True) + + if main_candidates: + top_candidate = main_candidates[0][0] + print(f"推荐的主进程: {top_candidate['name']} (PID: {top_candidate['pid']})") + + # 生成配置建议 + unique_names = list(set(proc['name'] for proc in pdms_related_processes)) + print(f"\n📝 配置文件建议:") + print(f"建议将PDMS的 check_process_name 设置为:") + + if len(unique_names) == 1: + print(f' check_process_name: "{unique_names[0]}"') + else: + print(f' check_process_name: {unique_names}') + + print(f"\n详细进程名称列表:") + for i, name in enumerate(unique_names, 1): + print(f" {i}. {name}") + + print(f"\n=== 检测完成 ===") + +if __name__ == "__main__": + asyncio.run(detect_pdms_processes()) \ No newline at end of file diff --git a/configs/software_config.yaml b/configs/software_config.yaml index f7104e8..a906b07 100644 --- a/configs/software_config.yaml +++ b/configs/software_config.yaml @@ -12,4 +12,12 @@ software: executable_path: "C:\\Program Files\\Autodesk\\Revit 2017\\Revit.exe" startup_args: ["/language", "CHS"] startup_timeout: 90 - check_process_name: "Revit.exe" \ No newline at end of file + check_process_name: "Revit.exe" + + pdms: + name: "AVEVA PDMS 12.1 SP4" + executable_path: "C:\\AVEVA\\Plant\\PDMS12.1.SP4\\pdms.bat" + startup_args: ["Design", "noconsole"] + startup_timeout: 120 + check_process_name: ["des.exe", "PDMSConsole.exe"] + stop_timeout: 20 \ No newline at end of file diff --git a/frontend-api-docs.md b/frontend-api-docs.md index eeefdaf..8b0df77 100644 --- a/frontend-api-docs.md +++ b/frontend-api-docs.md @@ -368,6 +368,14 @@ software: startup_args: ["/language", "CHS"] startup_timeout: 90 check_process_name: "Revit.exe" # 单进程检测 + + pdms: + name: "AVEVA PDMS 12.1 SP4" + executable_path: "C:\\AVEVA\\Plant\\PDMS12.1.SP4\\pdms.bat" # 支持批处理文件 + startup_args: ["Design", "noconsole"] + startup_timeout: 120 + check_process_name: ["des.exe", "PDMSConsole.exe"] # PDMS多进程检测 + stop_timeout: 20 ``` **配置字段说明:**