Flutter Dart如何在使用Process.run时隐藏cmd?
构建Dart应用程序后,函数Process.run开始打开一个可见的cmd,持续两天Flutter Dart如何在使用Process.run时隐藏cmd?,flutter,dart,Flutter,Dart,构建Dart应用程序后,函数Process.run开始打开一个可见的cmd,持续两天 final bool checkEnvironment = environment == ShellEnvironment.powershell; ProcessResult result = await Process.run( checkEnvironment ? 'powershell' : command, checkEnvironment ? [command] : args, runIn
final bool checkEnvironment = environment == ShellEnvironment.powershell;
ProcessResult result = await Process.run(
checkEnvironment ? 'powershell' : command,
checkEnvironment ? [command] : args,
runInShell: checkEnvironment,
);
链接示例(gif):对于每个命令,它都会打开一个新的cmd窗口
如果我用idea(不是构建版本)启动应用程序,这样的事情就不会发生
还尝试了此版本-仍然存在相同的问题:
final bool checkEnvironment = environment == ShellEnvironment.powershell;
ProcessResult result = await Process.run(
'start',
checkEnvironment ? ['/min', 'powershell', '-command', command] : ['/min', 'cmd', '/c', command],
runInShell: true,
);
发现一篇文章说runInShell创建了一个新窗口,所以我删除了它,但结果还是一样的
final bool checkEnvironment = environment == ShellEnvironment.powershell;
ProcessResult result = await Process.run(
checkEnvironment ? 'powershell.exe' : 'cmd',
checkEnvironment ? ['-command', command] : ['/c', command],
);
在windows/runner/resources/main.cpp中更改main.cpp可以解决此问题:
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上的正常行为。对于PowerShell,可能可以帮助您。如果您正在尝试执行
.bat
/.cmd
脚本,那么或者可能会有帮助。这些都没有帮助