if "%1"=="h" goto begin mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit :begin python App.py
代码问题在于Windows 11 25H2版本中对VBScript和Mshta的安全限制。从较新的Windows 11版本开始,微软加强了对脚本执行的安全控制。
主要问题:
- mshta安全限制增强 - Windows 11新版本默认限制mshta执行脚本
- VBScript逐渐被弃用 - 微软正在逐步淘汰VBScript
- 权限问题 - 可能需要管理员权限或调整安全设置
解决方案:
方案1:使用PowerShell替代(推荐)
@echo off
if "%1"=="h" goto begin
PowerShell -WindowStyle Hidden -Command "Start-Process '%~nx0' -ArgumentList 'h' -WindowStyle Hidden"
exit /b
:begin
python App.py
方案2:使用纯批处理隐藏窗口
@echo off
if not "%1"=="" goto :begin
REM 使用临时VBS文件隐藏窗口
echo Set WshShell = CreateObject("WScript.Shell") > "%temp%\run_hidden.vbs"
echo WshShell.Run chr(34) ^& "%~f0" ^& chr(34) ^& " h", 0, False >> "%temp%\run_hidden.vbs"
cscript //nologo "%temp%\run_hidden.vbs"
del "%temp%\run_hidden.vbs"
exit /b
:begin
python App.py
方案3:使用Python直接隐藏窗口(最佳方案)
创建一个新的Python启动脚本:
start_app.py:
import subprocess
import sys
import os
# 隐藏控制台窗口(Windows系统)
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
subprocess.Popen([sys.executable, "App.py"],
startupinfo=startupinfo,
creationflags=subprocess.CREATE_NO_WINDOW)
else:
subprocess.Popen([sys.executable, "App.py"])
方案4:调整系统设置(临时方案)
如果必须使用原代码,可以尝试:
- 以管理员身份运行CMD,执行:
reg add "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f - 或调整组策略(专业版以上)
- 注意: 这可能会降低系统安全性
建议:
- 使用方案1(PowerShell) - 兼容性好,安全性高
- 考虑方案3(Python直接启动) - 最干净,不需要额外脚本
- 确保Python已正确添加到系统PATH环境变量