2011-03-30 90 views
0

我正在写一个小小的Ruby脚本(在Windows XP上)需要检查ENV几件事情(特别是如果设置了一些东西,并且如果它们是如果它们设置为正确的值。如果ENV [“CUSTOM_PATH”]不包含C:\ some_program \ bin或者它不存在,那么它需要被添加和修改,并且ENV被保存如何从Ruby(NOT COMMAND SHELL)保存对系统ENV的更改?

只是为了澄清 - 我希望变化是永久性的,并具有系统范围的效果,而不仅仅是当前会话基本上我试图创建一个快捷方式去我的计算机 - >属性 - >高级 - >系统变量 - >手动更改一堆 - >保存,我需要每天做5-6次,而我正在开发,它变得非常快速恼人:-)

除了最后一部分,我知道了所有的工作 - 我无法弄清楚如何保存ENV,而不是诉诸shell命令。

有没有办法直接从红宝石,而不是壳?

谢谢!

解决方法:

作为公认的答案指定的 - 这是不可能的事情。然而,我的工作依赖于Ruby和由Vincent Fatica开发的名为SETENV.EXE的命令行实用程序的组合。现在已经超过十年了,但在Windows XP中运行良好(尚未在Windows 7下测试)。它比MS恕我直言可用的setx工具更好。免得删除东西。

下面是使用它的方法的简单的例子:

def switch_ruby_env 
    if RUBY_VERSION.match("1.8.7").nil? 
    `setenv -m CUSTOM_PATH " "` 
    else 
    `setenv -m CUSTOM_PATH -delete` 
    end 
end 

回答

1

可惜你不能有一个过程直接保存环境设置,但你可以看看这个:

Persisting an environment variable through Ruby

了解如何利用在注册表中保存值并使其最终生成环境变量。

+0

谢谢麦克。这似乎是一个有效的解决方案,但我无法注销,并且每测试5分钟我都会测试 - 这不会比手动过程更快 - 不节省时间:-)(我的机器需要大约1.5到2分钟完全登录 - 一堆需要运行的启动应用程序)。我猜powershell或vbs是我唯一的解决方案。感谢您的关注! – konung 2011-03-30 18:46:23

+0

你可能想考虑运行一个虚拟机进行测试。您可以将其分解到基本的启动应用程序,而不再是其他应用程序,因此其启动时间尽可能快。我使用它们在Linux客户机上构建测试配置,非常方便。我喜欢[VirtualBox](http://www.virtualbox.org/)。 – 2011-03-30 18:53:25

+0

为此运行一个虚拟主机似乎是一个矫枉过正的问题。另外我不能在每台机器上安装virtualbox,我需要这个脚本和一个软件。最终,它需要能够在运行和切换回环境时改变环境,并且它需要在系统范围内 - 无法绕过它。我需要支持一些遗留软件,这是我无法控制的。我刚刚完成了一个脚本,使用ruby和setx来做我想要的。谢谢你的建议。 – konung 2011-03-30 19:35:54

1

这是我会做的。

呼叫env_vals = batchfile_that_echos_ENV_values.bat

然后,阅读这些ENV值,如果他们不那么正确, batchfile_to_modify_env --key=value