2009-09-17 41 views
3

我使用WiX创建了一个安装程序。安装程序所做的一件事是设置一个环境变量PLUGIN_DIRECTORY(它在系统级别)。无法访问Windows环境变量与C#

在我编写的一些C#代码中,我需要访问该变量才能看到某个目录。我通过下面的代码做到这一点:

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

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

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

感谢

+0

只是为了确保 - 在WiX安装完成后启动了C#代码的过程,还是在该点之前启动?例如,插件的WiX安装程序,主应用程序是否已在运行? – 2009-09-17 18:22:48

回答

9

如果你有Visual Studio中打开,当你创建的环境变量,然后我不知道它是否将它捡起来,直到您关闭并重新启动VS.当一个进程启动时,它会从它的父进程继承环境变量。我并不确定VS如何在构建它之后启动可执行文件,但它可能是一个子进程,因此不会提取新的环境变量。

+1

这是我的问题 - 当我第一次执行安装时,我没有正确响应FileWatcher的事件(也就是说,我的应用程序无法正常工作)。我在Visual Studio中修复了这个应用程序,但是当我在Visual Studio中测试时,它没有选择新的环境变量。基本上,这是两个不同的问题。谢谢你指点我正确的方向! – JasCav 2009-09-17 18:53:24

0

可以肯定,安装程序运行后PLUGIN_DIRECTORY是否有任何设置?

+0

是的,它的确如此。它被设置为本地驱动器上的路径(C:\ Program Files \ MyApp \ Plugins) – JasCav 2009-09-17 18:47:38

0

对不起,如果我非常错误我无法证实这一点,因为我没有安装编译器。 但您可以尝试使用: watcher.Path = Environment.GetEnvironmentVariable(“%PLUGIN_DIRECTORY%”)+“\”;

也就是说,%PLUGIN_DIRECTORY%而不仅仅是PLUGIN_DIRECTORY。

希望它的任何帮助

0

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

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

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

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