diff --git a/src/process.cpp b/src/process.cpp index 2b6c1507..8783db8c 100644 --- a/src/process.cpp +++ b/src/process.cpp @@ -279,8 +279,21 @@ std::string parse_env_val(bp::native_environment &env, const std::string_view &v ss.write(pos, (dollar - pos)); auto var_begin = next + 1; auto var_end = find_match(next, std::end(val_raw)); + auto var_name = std::string { var_begin, var_end }; - ss << env[std::string { var_begin, var_end }].to_string(); +#ifdef _WIN32 + // Windows treats environment variable names in a case-insensitive manner, + // so we look for a case-insensitive match here. This is critical for + // correctly appending to PATH on Windows. + auto itr = std::find_if(env.cbegin(), env.cend(), + [&](const auto &e) { return boost::iequals(e.get_name(), var_name); }); + if(itr != env.cend()) { + // Use an existing case-insensitive match + var_name = itr->get_name(); + } +#endif + + ss << env[var_name].to_string(); pos = var_end + 1; next = var_end; diff --git a/src_assets/windows/assets/apps.json b/src_assets/windows/assets/apps.json index de4847c3..0b106ae8 100644 --- a/src_assets/windows/assets/apps.json +++ b/src_assets/windows/assets/apps.json @@ -1,6 +1,6 @@ { "env": { - "PATH": "$(PATH);C:\\Program Files (x86)\\Steam" + "PATH": "$(PATH);$(ProgramFiles(x86))\\Steam" }, "apps": [ {