(也可以看看:为什么 Windows 对环境变量有限制?)
根据 Windows 应用程序开发文档,“用户定义的环境变量的最大大小为 32,767 个字符。”我创建了一个 Rust 包来测试这个限制。令我惊讶的是,我能够创建一个比 32,767 个字符长得多的环境变量。
Cargo.toml
:
[package]
name = "big-variable-test"
edition = "2021"
[[bin]]
name = "big-variable-creator"
path = "src/big_variable_creator.rs"
[[bin]]
name = "big-variable-size-checker"
path = "src/big_variable_size_checker.rs"
src\big_variable_creator.rs
:
// This is the largest number that I’ve gotten to work. It’s much larger than the limit that the
// documentation stated.
const MAX_ENVIRONMENT_VARIABLE_LENGTH: usize = 999999999;
fn main() {
std::process::Command::new("cargo")
.args(["run", "--bin", "big-variable-size-checker"])
.env("BIG_VARIABLE", "A".repeat(MAX_ENVIRONMENT_VARIABLE_LENGTH))
.spawn()
.expect("cargo should have started")
.wait()
.expect("cargo should be running");
}
src\big_variable_size_checker.rs
:
fn main() {
let number_of_chars = std::env::var("BIG_VARIABLE")
.expect("BIG_VARIABLE should be set")
.chars()
.count();
println!("{}", number_of_chars);
}
当我运行 时cargo run --bin big-variable-creator
,我可以看到它能够创建一个长度为 999,999,999 个字符的环境变量。经过进一步的研究,我发现微软开发者博客上的一篇文章写道:
此程序创建一个环境块,该块仅包含一个变量,名为 ,
x
其值为 131,067 份字母x
。 它并不引人注目,当然也没有什么用处,但它确实表明 Windows 对此很满意。
Windows 11 对环境变量的长度限制是否真的有 32,767 个字符,还是仅适用于旧版本的 Windows?如果创建这么大的环境变量,会不会有什么功能停止工作?