用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()
相关推荐
我是坏垠19 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant20 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
Bobolink_20 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
你怎么知道我是队长20 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
xingke20 小时前
C 语言多文件编程:(一)头文件、extern、编译链接
c语言·开发语言·多文件
测试秃头怪20 小时前
如何评估自动化测试脚本的编写时间和维护工作量?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
姚青&21 小时前
测试左移体系
python·自动化
技术民工之路21 小时前
Python Socket编程零基础实战教程(TCP/UDP通信完整版)
python·tcp/ip·udp
戮漠summer21 小时前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala