很多EXE程序,可以重复打开,但有些服务端程序如果多开就会导致端口冲突等问题,那么要解决程序多开就要使用到wnidows文件锁,下面是示例代码:
# 文件锁,防止重复打开程序 import sys import os import tempfile import atexit import ctypes import msvcrt # Windows特有模块 def show_warning(): """显示已运行警告弹窗""" ctypes.windll.user32.MessageBoxW( 0, "应用中心补丁已运行,请不要重复启动!", "温馨提示", 0x40 | 0x0 # MB_ICONINFORMATION | MB_OK ) def prevent_multiple_instances(app_name="MyApp"): """Windows专用文件锁""" lock_file = os.path.join(tempfile.gettempdir(), f"{app_name}.lock") try: # 尝试以独占模式打开文件 lock_fd = os.open(lock_file, os.O_RDWR | os.O_CREAT) # 尝试获取文件锁 try: msvcrt.locking(lock_fd, msvcrt.LK_NBLCK, 1) # 写入进程ID os.lseek(lock_fd, 0, os.SEEK_SET) os.write(lock_fd, str(os.getpid()).encode()) # 注册清理函数 def cleanup(): try: msvcrt.locking(lock_fd, msvcrt.LK_UNLCK, 1) os.close(lock_fd) os.unlink(lock_file) except: pass atexit.register(cleanup) print("成功获取文件锁") return lock_fd except IOError: # 文件已被锁定 os.close(lock_fd) print("程序已在运行中") show_warning() # 添加弹窗提醒 sys.exit(1) except Exception as e: print(f"错误: {e}") sys.exit(1) if __name__ == "__main__": lock_handle = prevent_multiple_instances("main") print("程序正常启动") input("按回车键退出...")
以上代码测试真实可用.文章源自网吧系统维护-https://www.58pxe.com/12933.html 文章源自网吧系统维护-https://www.58pxe.com/12933.html
版权声明:文章图片资源来源于网络,如有侵权,请留言删除!!!


评论