【发布时间】:2021-07-12 17:40:14
【问题描述】:
我为 MacOS 构建了一个网络应用程序供私人使用。它使用 shell 命令并运行 bash 文件。 我的大多数同事都在使用 MacOS,但仍然需要为 Windows 发布相同的应用程序。
有什么方法可以在我运行 shell 脚本时隐藏 cmd 窗口?
提前致谢。
【问题讨论】:
我为 MacOS 构建了一个网络应用程序供私人使用。它使用 shell 命令并运行 bash 文件。 我的大多数同事都在使用 MacOS,但仍然需要为 Windows 发布相同的应用程序。
有什么方法可以在我运行 shell 脚本时隐藏 cmd 窗口?
提前致谢。
【问题讨论】:
在 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);
}
}
【讨论】:
有一些选项可以运行隐藏在 Windows 上的 cmd,例如:
ShowWindow(SW_HIDE) 以编程方式启动隐藏的 cmd 窗口。在这种情况下隐藏意味着您将看不到 GUI,并且它不会出现在任务栏上。一些例子:
【讨论】: