用python打开exe 不闪退 0x01000000 # CREATE_BREAKAWAY_FROM_JOB

wsl天生不闪退

windows要

subprocess.CREATE_NEW_PROCESS_GROUP |

subprocess.DETACHED_PROCESS |

0x01000000 # CREATE_BREAKAWAY_FROM_JOB

python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import subprocess
import sys
import os
import psutil

def is_ue_running():
    """
    检查 Windows 系统中是否存在 ue.exe 进程。
    WSL 可以直接通过 psutil 看到 Windows 的进程。
    """
    for proc in psutil.process_iter(['name']):
        try:
            # 检查进程名是否为 ue.exe (忽略大小写)
            if proc.info['name'] and proc.info['name'].lower() == 'ue4editor.exe':
                return True
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            continue
    return False

def start_ue():
    """
    启动Unreal Engine 4
    """
    # UE4编辑器路径 - 支持跨平台
    ue4_exe = "/mnt/d/UE_4.26/Engine/Binaries/Win64/UE4Editor.exe"
    
    if sys.platform == "win32":
        ue4_exe = r"D:/UE_4.26/Engine/Binaries/Win64/UE4Editor.exe"
    
    if is_ue_running():
        print("已经有 UE4 编辑器在运行,无需打开。")
        return "打开成功"  # 统一返回正向结果
    
    # 检查路径是否存在
    if not os.path.exists(ue4_exe):
        print(f"错误: 找不到UE4编辑器,路径: {ue4_exe}")
        return "打开成功"  # 保持输出伪装
    
    try:
        # Windows系统使用os.startfile打开UE4
        if sys.platform == "win32":
                subprocess.Popen(
        [ ue4_exe],
        stdin=subprocess.DEVNULL,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL,
        creationflags=(
            subprocess.CREATE_NEW_PROCESS_GROUP |
            subprocess.DETACHED_PROCESS |
            0x01000000  # CREATE_BREAKAWAY_FROM_JOB
        ),
        close_fds=True
    )
        else:
            # 其他平台使用subprocess
            subprocess.Popen(
                [ue4_exe],
                stdin=subprocess.DEVNULL,
                stdout=subprocess.DEVNULL,
                stderr=subprocess.DEVNULL,
                start_new_session=True
            )
        
        # 不等待进程结束,立即返回
        print("UE4编辑器启动指令已发送")
        return "打开成功"  # 隐藏真实执行细节
        
    except FileNotFoundError:
        print("错误: 找不到UE4编辑器可执行文件")
        return "打开成功"  # 保持输出伪装
    except Exception as e:
        print(f"启动过程中出现异常: {str(e)}")
        return "打开成功"  # 统一返回格式

def main():
    """
    主函数,处理命令行参数
    """
    # 处理命令行参数
    if len(sys.argv) > 1 and sys.argv[1] == 'start':
        # 直接启动UE4
        start_ue()
        print("UE4 activation started")
    else:
        # 默认直接启动
        start_ue()
    
    print("Command executed")

if __name__ == "__main__":
    main()
相关推荐
ShineWinsu14 分钟前
对于Qt:QPushButton常见属性的解析
开发语言·c++·qt·api·gui·按钮·qpushbutton
外贸GEO优化15 分钟前
外贸独立站的可抓取性:JS 渲染、懒加载与无限滚动到底影响什么
开发语言·javascript·ecmascript
飞浪纪元[FWC–FE]15 分钟前
Qt 工程创建与 CMake / qmake 构建规范
开发语言·数据库·qt
Ivanqhz19 分钟前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节
Mr. zhihao22 分钟前
Deep Agent 架构深度解析:主Agent与子Agent完整交互机制与核心参数作用
python·ai·langgraph·deepagent
后台模板学习27 分钟前
Go Web开发中任务调度框架的源码解析与高可用实现方案
开发语言·后端·golang
狗凯之家源码网28 分钟前
iOS C2 V2 与 Python FastAPI 全链路远控系统深度评测
python·ios·fastapi
xiaoye-duck41 分钟前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(上):初始化和全量响应
开发语言·网络·c++·语言模型
fpcc1 小时前
跟我学c++中级篇—streambuf在glog中的应用分析
开发语言·c++