用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()
相关推荐
Fuyo_1119几秒前
C++中的活字印刷术——模板·初阶
开发语言·c++·笔记
在角落发呆2 分钟前
跨越网络鸿沟:传统文件传输与现代内网穿透的奇妙交响
开发语言·php
Season4505 分钟前
C++之模板元编程(前置知识 constexpr)
开发语言·c++
BU摆烂会噶7 分钟前
【LangGraph】House_Agent 实战(四):预定流程 —— 中断与人工干预
android·人工智能·python·langchain
AI玫瑰助手8 分钟前
Python运算符:比较运算符(等于不等等于大于小于)与返回值
android·开发语言·python
GIOTTO情19 分钟前
Infoseek舆情处置系统的技术实现与落地实践
python
计算机安禾30 分钟前
【c++面向对象编程】第40篇:单例模式(Singleton)的多种C++实现
开发语言·c++·单例模式
new_dev38 分钟前
Python实现Android自动化打包工具:加固、签名、多渠道一键完成
android·python·自动化
_日拱一卒1 小时前
LeetCode:114二叉树展开为链表
java·开发语言·算法
天天进步20151 小时前
从零打造 Python 全栈项目:智能教学辅助系统
开发语言·人工智能·python