微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PATHvariables的GetEnvironmentVariable和SetEnvironmentVariable

@H_404_0@我想用C#程序来扩展当前的PATHvariables。 在这里我有几个问题:

@H_404_0@使用GetEnvironmentvariable("PATH",EnvironmentvariableTarget.Machine)replace占位符(即'%systemRoot%system32'被replace为当前path'C:Windowssystem32' )。 更新PATHvariables,我不想用pathreplace占位符。

@H_404_0@SetEnvironmentvariable后,不能再从命令框中打开程序(即命令框中的calc.exe不起作用)。 我使用下面的代码

@H_404_0@String oldpath = Environment.GetEnvironmentvariable("PATH",EnvironmentvariableTarget.Machine); Environment.SetEnvironmentvariable("PATH",oldpath + ";%MYDIR%",EnvironmentvariableTarget.Machine);

@H_404_0@在Windows中编辑和更改PATHvariables后,所有工作都会重新开始。 (我需要更改,否则不会被覆盖)

@H_404_0@2 AverageTimer32性能计数器

@H_404_0@问题与Windows服务以编程方式重新启动自己

@H_404_0@在Windows中比在Linux中慢的端口监听?

@H_404_0@如何获取当前用户在Windowslogin会话的唯一ID –

@H_404_0@如何测量文件(硬盘)I / O的特性?

@H_404_0@如何防止或检测“%APPNAME%停止工作”对话框?

@H_404_0@使用win32 API函数启用/禁用任务pipe理器,而不是通过Windowsregistry

@H_404_0@技术防止多个login到同一台计算机

@H_404_0@“这个文件来自另一台计算机,可能被阻止,以保护这台计算机。” – 如何以编程方式在C#.net中删除属性

@H_404[email protected]开源和运行平台select

@H_404_0@您可以使用注册表来读取和更新:

@H_404_0@string keyName = @"SYstemCurrentControlSetControlSession ManagerEnvironment"; //get non-expanded PATH environment variable string oldpath = (string)Registry.LocalMachine.CreateSubKey(keyName).GetValue("Path","",RegistryValueOptions.DoNotExpandEnvironmentNames); //set the path as an an expandable string Registry.LocalMachine.CreateSubKey(keyName).SetValue("Path",RegistryValueKind.ExpandString);

@H_404_0@您可以使用WMI来检索原始值(不确定有关更新它们):

@H_404_0@ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Environment WHERE Name = 'PATH'"); foreach (ManagementBaSEObject managementBaSEObject in searcher.Get()) Console.WriteLine(managementBaSEObject["VariableValue"]);

@H_404_0@检查MSDN上的WMI参考

@H_404_0@你可以尝试这种混合。 它从注册表中获取路径变量,并将“NewPathEntry”添加到路径(如果尚未存在的话)。

@H_404_0@static void Main(string[] args) { string NewPathEntry = @"%temp%data"; string NewPath = ""; bool MustUpdate = true; string RegKeyName = @"SYstemCurrentControlSetControlSession ManagerEnvironment"; string path = (string)Microsoft.Win32.Registry.LocalMachine.OpenSubKey(RegKeyName).GetValue ("Path",Microsoft.Win32.RegistryValueOptions.DoNotExpandEnvironmentNames); string[] paths = path.Split(new char[] { ';' },StringSplitOptions.RemoveEmptyEntries); foreach (string subPath in paths) { NewPath += subPath + ";"; if (subPath.ToLower() == NewPathEntry.ToLower()) { MustUpdate = false; } } if (MustUpdate == true) { Environment.SetEnvironmentvariable("Path",NewPath + NewPathEntry,EnvironmentvariableTarget.Machine); } }

@H_404_0@你可以通过注册表…

@H_404_0@string keyName = @"HKEY_LOCAL_MACHInesYstemCurrentControlSetControlSession ManagerEnvironment"; //get raw PATH environment variable string path = (string)Registry.GetValue(keyName,"Path",""); //... Make some changes //update raw PATH environment variable Registry.SetValue(keyName,path);

@H_404_0@在应用程序上工作时,我们必须有一个选项来使用来自用户定义文件夹的Oracle instantclient。 为了使用instantclient,我们必须修改环境路径变量并在调用任何与Oracle相关的功能之前添加这个文件夹。 这里是我们使用的方法

@H_404_0@/// <summary> /// Adds an environment path segments (the PATH varialbe). /// </summary> /// <param name="pathSegment">The path segment.</param> public static void AddpathSegments(string pathSegment) { LogHelper.Log(LogType.Dbg,"EnvironmentHelper.AddpathSegments","Adding path segment: {0}",pathSegment); string allPaths = Environment.GetEnvironmentvariable("PATH",EnvironmentvariableTarget.Process); if (allPaths != null) allPaths = pathSegment + "; " + allPaths; else allPaths = pathSegment; Environment.SetEnvironmentvariable("PATH",allPaths,EnvironmentvariableTarget.Process); }

@H_404_0@请注意,这必须在其他任何事情之前调用,可能作为您的主文件中的第一行(不知道控制台应用程序)。

@H_404_0@使用Registry.GetValue将扩大占位符,所以我建议使用Registry.LocalMachine.OpenSubKey ,然后从设置为不扩展环境变量的选项设置的子键中获取值。 一旦你操纵了你喜欢的路径,使用注册表再次设置值。 这将防止Windows“忘记”你的问题的第二部分中提到的路径。

@H_404_0@const string pathKeyName = @"SYstemCurrentControlSetControlSession ManagerEnvironment"; var pathKey = Registry.LocalMachine.OpenSubKey(pathKeyName); var path = (string)pathKey.GetValue("PATH",RegistryValueOptions.DoNotExpandEnvironmentNames); // Manipulate path here,storing in path Registry.SetValue(String.Concat(@"HKEY_LOCAL_MACHINE",pathKeyName),"PATH",path);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐