.NET环境变量是否被删除

时间:2013-08-04 13:40:36

标签: c# .net asp.net-mvc

我需要将AWS Access Keys存储在私有的地方,并通过代码读取,而不是存储在其中。我正在考虑将它们存储在EnviromentVariabels中,但是从描述中可以看出,它们是否仅在应用程序重新启动之前保留,或者存储在注册表中直到过度写入。

Creates, modifies, or deletes an environment variable stored in the current process

Creates, modifies, or deletes an environment variable stored in the current process or in the Windows operating system registry key reserved for the current user or local machine.

他们是否保持良好状态,甚至是否有更好的方法来拯救他们?

2 个答案:

答案 0 :(得分:3)

当流程结束时,为当前流程创建的环境变量确实不再存在。但是,存储在注册表中的当前用户或匹配项的环境变量将保留在那里,直到被明确删除。

使用overload of SetEnvironmentVariable that takes an EnvironmentVariableTarget确定要保存变量的位置。 documentation on EnvironmentVariableTarget彻底解释了在什么情况下保存或丢弃存储的值:

  • Process:“当进程终止时,操作系统会破坏该进程中的环境变量。”
  • Machine / User:“当进程终止时,操作系统会破坏该进程中的环境变量。但是,注册表中的环境变量会持续存在,直到用户以编程方式或通过方式删除它操作系统工具。“

也就是说,我不相信环境变量适合存储任何应该保密的访问类型。环境变量可以由系统上的任何应用程序读取和写入,它们甚至是一个暴露的地方(与注册表或文件系统中隐藏的任何地方相对)an be directly enumerated with the Environment object

答案 1 :(得分:1)

Windows上的每个进程都获得了自己的环境变量副本,并且在进程终止后它们都消失了。但是,您可以通过某种方式修改外部环境,只需点击几下您所提供的链接即可解释其中一些:http://msdn.microsoft.com/en-us/library/vstudio/system.environmentvariabletarget%28v=vs.90%29.aspx