为什么设置 USER 环境变量需要 12 秒?

2024-01-30

使用以下代码,我经历了可怕的运行时:

Option Explicit

Dim ShellEnvironment: Set ShellEnvironment=CreateObject ("WScript.Shell").Environment ("USER")
Dim Name: Name="MyVar"
Dim NewVal: NewVal="This is my value"

Services.StartTransaction "SetEnv"
ShellEnvironment (Name)=NewVal
Services.EndTransaction ("SetEnv")

请注意,只有 Services.* 内容是 QTP 特定的。这两条语句生成以下运行结果条目,指示环境变量赋值的运行时:

Transaction "SetEnv" ended with "Pass" status (Total Duration: 12.1970 sec). 

这是在一台非常快的机器上进行的。当然,这是不可接受的长运行时间。

根据Environment.SetEnvironmentVariable 需要很长时间才能在用户或计算机级别设置变量 https://stackoverflow.com/questions/4825967/environment-setenvironmentvariable-takes-a-long-time-to-set-a-variable-at-user-o,这是因为所有顶级窗口都会收到 1 秒超时通知。我不确定这是否是 C# 特定的。嗯,显然不是。但我不知道如何在 VBScript 下控制此通知/超时过程。

所以一般来说,问题是:

如何在 VBScript 中设置 USER 环境变量而不产生可怕的运行时?


这是一个很好的解决方法(在 C# 中):

var envName = "USERNAME";

var envValue = "JERRY";

// it's up to you if you await this or not
Task.Factory.StartNew(() => Environment.SetEnvironmentVariable(envName, envValue, EnvironmentVariableTarget.User));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么设置 USER 环境变量需要 12 秒? 的相关文章

随机推荐