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

如何避免执行PowerShell脚本时弹出两个窗口?

问题分析与解决

你的代码出现重复执行PowerShell脚本的问题,核心原因是直接将.ps1文件作为Process的FileName,同时启用UseShellExecute=True的方式存在潜在的重复触发风险——Windows通过shell关联打开.ps1文件时,系统处理逻辑可能导致两次启动PowerShell进程。

修复方案

修改Process启动逻辑,直接调用powershell.exe并将脚本路径作为参数传入,同时禁用Shell执行:

Public Sub SendDaEmailMakeXMLFile()
    Using p As Process = New Process
        p.StartInfo = New ProcessStartInfo() With {
            .CreateNoWindow = True,
            .UseShellExecute = False,
            .FileName = "powershell.exe",
            .Arguments = "-ExecutionPolicy Bypass -File ""C:\SVMXEmailAutomation.ps1"""
        }
        p.Start()
        p.WaitForExit()
    End Using
End Sub

关键修改点说明

  1. UseShellExecute=False:直接启动powershell.exe可执行文件,不依赖系统文件关联逻辑,从根源避免重复触发的可能。
  2. 明确调用powershell.exe并传参:通过-File参数指定要执行的脚本,确保仅启动一个PowerShell进程执行任务。
  3. -ExecutionPolicy Bypass:临时绕过PowerShell的执行策略限制,避免因默认策略阻止脚本运行(如果你的系统未设置宽松的执行策略)。
  4. 移除手动Close():Using块会自动释放Process资源,无需手动调用Close()。

额外排查方向

如果修改后仍出现重复执行,检查你的VB.NET程序是否两次调用了SendDaEmailMakeXMLFile方法——比如在条件判断或事件绑定中重复触发。可以在方法开头添加日志输出,记录每次调用的时间,确认是否是调用方的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:15:10