San*_*osh 7 c# environment-variables
我正在使用C#(.NET 3.5)中的Environment.SetEnvironmentVariable方法调用,如下所示:
Environment.SetEnvironmentVariable(environmentVariable,value,"Machine");
但是,在单个测试系统(运行XP和Windows 7)上,这个单个调用需要2秒多的时间.我想通了,这可能是因为:"如果目标是用户或计算机,其他应用程序由Windows WM_SETTINGCHANGE消息通知的设置操作的." 有没有办法将此通知抑制到其他应用程序,以便我的环境快速设置并返回..?
请注意,我有一个组件可以设置大约20个环境变量,如果我使用上面描述的功能,则需要大约一分钟才能完成该任务.
请建议!!
MBu*_*lli 11
如果您使用反射器解除SetEnvironmentVariable的设置,您将在方法的底部看到WM_SETTINGCHANGE,其中Win32调用SendMessageTimeout.句柄是HWND_BROADCAST(0xffff),因此每个顶部窗口都获取消息,超时设置为1000ms.根据msdn:
如果此参数为HWND_BROADCAST((HWND)0xffff),则会将消息发送到系统中的所有顶级窗口,包括已禁用或不可见的无主窗口.在每个窗口超时之前,该函数不会返回.因此,总等待时间可以达到uTimeout的值乘以顶级窗口的数量.
但fuFlags参数设置为0.
SMTO_NORMAL(0x0000):在等待函数返回时,不会阻止调用线程处理其他请求.
SMTO_BLOCK(0x0001):阻止调用线程处理任何其他请求,直到函数返回.
我不确定函数是否阻塞.您可以尝试仅使用Win32设置变量,并仅在设置所有变量后发送广播消息.或者您可以直接访问注册表.
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |