You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现右键启动的同程序多实例自动关闭仅留一个活动实例

批量启动程序实例的单窗口保留方案

问题背景

通过右键菜单启动文件移动及处理程序时,批量选择文件会触发多个程序实例(如选50个文件就启动50次),需要仅保留一个活动窗口。现有代码无法100%稳定运行:

# ========================================================
#this only catches the file adress that was right clicked and launch with the app. Then it moves it to the installer folder
try:
       
 # THIS CATCHES THE SELECTED FILE LINK TO BE MOVED TO THE  INSTALL FOLDER IF IT IS SUCCESSFULL

    variable= sys.argv[1]

    index = -1

    for i in variable:
        index = index + 1
        if "\\" in i:
           sum= index

       # MOVE TO INSTALLER DIRECTORY 
    shutil.move(variable, Install_folder + f"\\Installer\\files\\{str(variable[sum+ 1::])}")

except:
      print('FILE NOT ADDED THROUGH THE MOVE TOOL')

#=========================================================

processlist = list()

time.sleep(int(time.process_time())*random.randint(1,3))

for process in psutil.process_iter():
    processlist.append(process.name())

if processlist.count("program.exe") >= 4:
    sys.exit()

问题根源在于多个实例同时启动,进程计数逻辑无法精准控制实例留存。不想拆分移动和处理程序为两个独立进程。

最终解决方案代码

try:
    variable = sys.argv[1]
    index = -1

    # THIS CATCHES THE SELECTED FILE LINK TO BE MOVED TO THE HANDY INSTALL FOLDER IF IT IS SUCCESSFULL
    for i in chetita:
        index = index + 1
        if "\\" in i:
            sum = index

    # CHOOSES DIRECTORY WHERE THE FILES TO BE INSTALLED ARE
    shutil.move(variable, f"{Install_folder}\\program\\InstallFolder\\{str(variable[sum + 1::])}")
    os.makedirs(f"{Install_folder}\\program\\Queue")
    tiger = []
    serpent = []
    while True:
        time.sleep(1)
        serpent  = os.listdir(f"{Install_folder}\\program\\InstallFolder")
        time.sleep(1)
        tiger = os.listdir(f"{Install_folder}\\program\\InstallFolder")
        if tiger == serpent:
            break
except:
    if os.path.exists(f"{Install_folder}\\program\\Queue"):
       sys.exit()
    print('application executed directly through the .exe')

方案原理

所有实例启动后:

  • 第一个完成文件移动的实例会创建Queue文件夹,并进入循环,每隔1秒读取目标文件夹内容,连续两次读取结果一致时(说明其他实例已全部完成文件移动并退出),退出循环开始后续处理。
  • 其他实例因无法创建Queue文件夹(文件夹已被第一个实例创建,os.makedirs会抛出异常),触发except分支,检测到Queue文件夹存在后直接退出。

内容的提问来源于stack exchange,提问作者shadowuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:02:44