【问题标题】:How to hide a cmd window using Flutter Desktop (Windows)如何使用 Flutter Desktop (Windows) 隐藏 cmd 窗口
【发布时间】:2021-07-12 17:40:14
【问题描述】:

我为 MacOS 构建了一个网络应用程序供私人使用。它使用 shell 命令并运行 bash 文件。 我的大多数同事都在使用 MacOS,但仍然需要为 Windows 发布相同的应用程序。

有什么方法可以在我运行 shell 脚本时隐藏 cmd 窗口?

提前致谢。

【问题讨论】:

    标签: windows flutter shell cmd


    【解决方案1】:

    在 Windows 应用程序中,您可以更改 windows/runner/resources/main.cpp 中的以下行

    if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
       CreateAndAttachConsole();
    }
    

    到这里:

    if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
       CreateAndAttachConsole();
    }else {
       STARTUPINFO si = { 0 };
       si.cb = sizeof(si);
       si.dwFlags = STARTF_USESHOWWINDOW;
       si.wShowWindow = SW_HIDE;
    
       PROCESS_INFORMATION pi = { 0 };
       WCHAR lpszCmd[MAX_PATH] = L"cmd.exe";
       if (::CreateProcess(NULL, lpszCmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE | CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
      do {
        if (::AttachConsole(pi.dwProcessId)) {
          ::TerminateProcess(pi.hProcess, 0);
          break;
        }
      } while (ERROR_INVALID_HANDLE == GetLastError());
      ::CloseHandle(pi.hProcess);
      ::CloseHandle(pi.hThread);
     }
    }
    

    更多信息在这里:https://github.com/flutter/flutter/issues/47891

    【讨论】:

      【解决方案2】:

      有一些选项可以运行隐藏在 Windows 上的 cmd,例如:

      1. 使用 bat 脚本上的“隐藏”选项或使用 Windows API ShowWindow(SW_HIDE) 以编程方式启动隐藏的 cmd 窗口。在这种情况下隐藏意味着您将看不到 GUI,并且它不会出现在任务栏上。
      2. 通过“任务计划程序”运行它
      3. 作为后台服务运行

      一些例子:

      【讨论】:

        猜你喜欢
        • 2022-01-04
        • 2020-11-27
        • 1970-01-01
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 2018-11-04
        相关资源
        最近更新 更多