无法使用C#访问Windows环境变量

时间:2009-09-17 18:19:48

标签: c# windows

我使用WiX创建了一个安装程序。安装程序做的一件事是设置一个环境变量PLUGIN_DIRECTORY(它在系统级别)。

在我编写的一些C#代码中,我需要访问该变量,以便我可以观看某个目录。我通过以下代码执行此操作:

FileSystemWatcher water = new FileSystemWatcher();
watcher.Path = Environment.GetEnvironmentVariable("PLUGIN_DIRECTORY") + "\\";

不幸的是(当我调试时),所有watcher.Path都设置为“\”。

安装后是否需要重启?我不明白为什么变量已经设置好了。还有其他建议吗?我没有收到任何错误 - 它只是没有看到正确的道路。

由于

4 个答案:

答案 0 :(得分:9)

如果您在创建环境变量时打开了visual studio,那么我不知道它是否会在您关闭并重新启动VS之前将其取出。当一个进程启动时,它从它的父进程继承环境变量。我不确定VS在构建后如何启动可执行文件,但它可能是一个子进程,因此不会获取新的环境变量。

答案 1 :(得分:0)

可以肯定的是,PLUGIN_DIRECTORY在安装程序运行后是否设置了任何内容?

答案 2 :(得分:0)

我很抱歉,如果我非常错,我无法确认这一点,因为我没有安装编译器。 但你可以尝试使用: watcher.Path = Environment.GetEnvironmentVariable(“%PLUGIN_DIRECTORY%”)+“\”;

即%PLUGIN_DIRECTORY%,而不仅仅是PLUGIN_DIRECTORY。

希望有任何帮助

答案 3 :(得分:0)

系统环境是从父级继承的,更新后,其他进程无法识别。

我们可以从“机器”通过负载环境刷新过程环境并保存到“过程”。

string SysEnvir = System.Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);

System.Environment.SetEnvironmentVariable("Path", SysEnvir, EnvironmentVariableTarget.Process);