我的目标是拥有它,这样当双击可执行文件时,不会生成控制台,但当用户从命令行启动它时,它也能够打印到控制台。
我将以下特定于 Windows 的代码设置为不生成控制台:
#![windows_subsystem = "windows"]
fn main() {
println!("Hello world");
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它永远不会将 stdout/stderr 挂钩到任何东西,因为它设置为在启动时不创建控制台。尽管如此,有什么办法可以实现我的目标吗?
\n
这并不是 Rust 特有的,而是 Windows 的工作方式:您要么为“控制台”子系统编写,并且您的程序在没有控制台的情况下启动,要么为“windows”子系统和您的程序编写控制台如果从命令行启动,则将其自身与控制台分离。
\nPATHEXTCLI shell 用于在搜索命令 \xe2\x80\x94 时添加的文件扩展名的环境变量 \ xe2 PATH\x80\x94 通常在“.EXE”之前包含“.COM”,在这种情况下,可以创建一个控制台具有“.com”文件扩展名的应用程序版本(例如“app.com”)。这可以是独立版本,也可以只是生成主可执行文件的启动器(例如“app.exe”,一个 GUI 应用程序)。启动器可以传递一个命令行选项,允许主应用程序通过AttachConsole.
如果没有启动器,连接回控制台是一个坏主意,因为父应用程序(例如 CLI shell 或完整的 TUI 应用程序)通常不会等待 GUI 应用程序退出,在这种情况下,结果是混乱的交错 I/ O 有两个应用程序竞争访问权限。
\n| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |