C# 如何让ExpandEnvironmentVariables返回自定义变量?

C# 如何让ExpandEnvironmentVariables返回自定义变量?,c#,C#,我添加了一个自定义环境变量,但无法使其在ExpandEnvironmentVariables中返回 这两个呼叫工作正常: string s = Environment.GetEnvironmentVariable("TEST", EnvironmentVariableTarget.Machine); var path = Environment.ExpandEnvironmentVariables(@"%TEST%\Temp1"); // path = "%TEST%\\Temp1" //

我添加了一个自定义环境变量,但无法使其在ExpandEnvironmentVariables中返回

这两个呼叫工作正常:

string s = Environment.GetEnvironmentVariable("TEST", EnvironmentVariableTarget.Machine);
var path = Environment.ExpandEnvironmentVariables(@"%TEST%\Temp1");

// path = "%TEST%\\Temp1"
//s=“D:\Temp2”

//path=“C:\Windows\Temp1”

但是,此调用返回相同的输入字符串:

string s = Environment.GetEnvironmentVariable("TEST", EnvironmentVariableTarget.Machine);
var path = Environment.ExpandEnvironmentVariables(@"%TEST%\Temp1");

// path = "%TEST%\\Temp1"
我希望得到D:\Temp2\Temp1

要在最后一次调用中正确获取自定义环境变量,我缺少了什么?
汉斯和埃夫克的评论是正确的。因为没有人想添加答案,所以我将结束这个问题

无论出于何种原因,ExpandEnvironmentVariables都不会获得在应用程序启动后添加的任何键。我还使用运行的Windows服务测试了这一点。直到我重新启动服务后,才找到并填充了新的密钥


Microsoft文档中没有记录这种行为。

Hans和Evk的评论是正确的。因为没有人想添加答案,所以我将结束这个问题

无论出于何种原因,ExpandEnvironmentVariables都不会获得在应用程序启动后添加的任何键。我还使用运行的Windows服务测试了这一点。直到我重新启动服务后,才找到并填充了新的密钥


Microsoft文档中未记录此行为。

是否在代码中设置变量?如果是这样,您可以编辑您的问题以包含该代码吗?最明显的原因是您将此变量添加到系统环境中,而无需重新启动VS或程序。通过注销并再次登录,确保更改100%有效。要设置系统变量,我只需使用操作系统接口Unet System properties。我只是在代码中检索变量。GetEnvironmentVariable可以工作,但ExpandEnvironmentVariables不能…它看起来像是从注册表获取其值,而ExpandEnvironmentVariables使用Win32调用。这可能就是行为不同的原因,但我不知道如何使它们的行为相同。请尝试在不使用调试器(不使用VS)的情况下运行程序,或者在创建测试变量后重新启动Visual Studio。然后它应该会工作(老实说,我不完全理解其中的原因)。您是否在代码中设置变量?如果是这样,您可以编辑您的问题以包含该代码吗?最明显的原因是您将此变量添加到系统环境中,而无需重新启动VS或程序。通过注销并再次登录,确保更改100%有效。要设置系统变量,我只需使用操作系统接口Unet System properties。我只是在代码中检索变量。GetEnvironmentVariable可以工作,但ExpandEnvironmentVariables不能…它看起来像是从注册表获取其值,而ExpandEnvironmentVariables使用Win32调用。这可能就是行为不同的原因,但我不知道如何使它们的行为相同。请尝试在不使用调试器(不使用VS)的情况下运行程序,或者在创建测试变量后重新启动Visual Studio。然后它应该会起作用(老实说,我不完全理解其中的原因)。