Environment.SetEnvironmentVariable 需要很长时间才能在用户或计算机级别设置变量

2023-12-26

我在 C# (.NET 3.5) 中使用 Environment.SetEnvironmentVariable 方法调用,如下所示:

环境.SetEnvironmentVariable( 环境变量, 价值, “机器” );

然而,在多个测试系统(运行 XP 和 Windows 7)上,这个单一调用花费的时间远远超过 2 秒。 我想通了 http://msdn.microsoft.com/en-us/library/96xafkes.aspx这可能是因为:“如果目标是用户或机器,则其他应用程序将通过 Windows WM_SETTINGCHANGE 消息通知设置操作。” 有什么方法可以抑制对其他应用程序的通知,以便我的环境快速设置并返回..?

请注意,我有一个设置大约 20 个环境变量的组件,如果我使用上面描述的函数,大约需要一分钟才能完成该任务。

请推荐!!


如果您使用反射器反汇编 SetEnvironmentVariable,您将在方法的底部看到 WM_SETTINGCHANGE 以及对 SendMessageTimeout 的 Win32 调用。句柄是 HWND_BROADCAST (0xffff),因此每个顶级窗口都会收到消息,并且超时设置为 1000 毫秒。根据msdn:

如果该参数为HWND_BROADCAST ((HWND)0xffff),消息发送至 系统中的所有顶级窗口, 包括残疾人或隐形人 无主窗口。该功能不 返回直到每个窗口计时完毕 出去。因此,总等待时间 最大可达 uTimeout 的值 乘以顶级数 视窗。

但fuFlags参数设置为0。

SMTO_NORMAL (0x0000):调用 线程不会被阻止 处理其他请求的同时 等待函数返回。

SMTO_BLOCK (0x0001):防止 调用线程处理任何 函数执行之前的其他请求 返回。

我不确定这些功能是否会阻塞。您可以尝试仅使用 Win32 设置变量,并在设置所有变量后才发送广播消息。或者您可以直接访问注册表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Environment.SetEnvironmentVariable 需要很长时间才能在用户或计算机级别设置变量 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • Facebook 嵌入视频的 OpenGraph 遇到的困难

    我在实施通过研究找到的解决方案时遇到了一些困难here https stackoverflow com a 17811187 1467082 实际接受的答案没有帮助 已被投给玻利维亚 Problem Facebook 似乎无法识别我添加到标
  • 如何通过我的应用程序向服务器发送反馈信息?

    在我的应用程序中将使用反馈表 我必须将反馈信息发送到服务器 请帮助我如何在 Windows Phone 中将信息发送到服务器 您可以使用 EmailTask var emailTask new EmailComposeTask To ema
  • 计算字符串中所有字符的函数 - C++

    我想用C 写一个函数 计算字符串中的所有字符 我有一个名为 input 的字符串 程序的用户可以在其中输入一个句子 我将重要的字母存储在字符串字母表中 如下所示 string alphabet ABCDEFGHIJKLMNOPQRSTUVW
  • Xcode 8 无法启动:加载插件失败

    我的 Xcode 8 有一个大问题 无法启动 我总是收到以下错误 加载插件失败 该插件或其必备插件之一可能丢失或 已损坏 可能需要重新安装 我查看日志 发现问题出在 Python 所以我尝试更新 Python 重新安装 但没有什么问题 T
  • 可以通过 ISNUMERIC 函数过滤 Spark 数据帧吗?

    我有一个DataFrame对于 SQL 中的表 我想过滤这个DataFrame某一列的值是否为数字 val df sqlContext sql select from myTable val filter df filter ISNUMER
  • C++ - 如何从同一类的静态函数访问类的私有成员?

    我拥有的 所以我有一个带有私有成员和静态函数的类 该函数必须确实是静态的 我无法更改它 我想要的是 我需要从静态函数访问私有成员 有任何想法吗 请检查以下代码 class Base private int m member public B
  • 如何在 SQL 中将 Float 转换为 Varchar

    我正在做这个 declare num float 7708369000 select num as float convert varchar num as varchar 它给了我这个 float varchar 7708369000 7
  • 如何按 DESC 或 ASC 对 varchar 数字列进行排序?

    我写的 ORDER BY column ASC 但我的专栏是VARCHAR它有点像错误的1 10 2 代替1 2 10 我怎样才能做到像这样排序1 2 10 order by cast column as float Notes 假设您的列
  • 使用带有判别器的 C# MongoDB LINQ

    我有一个 MongoDB 集合 包含三个不同类 A B C 的文档 它们都继承自公共类 D 使用官方 C 驱动程序 我插入了所有三种类型 A B C 的文档 并且它们都通过 t 鉴别器正确显示 并且在我的代码中注册了它们的类映射 如果我发出
  • 序列信息缺失

    我正在使用 Spring Boot 应用程序 使用 com ibm db2 jcc DB2Driver 驱动程序和 Spring Data JPA 连接到 AS400 数据库 我使用 org hibernate dialect DB2Dia
  • TFCamemBERT 模型训练但测试没有结果

    目前我正在使用 Camembert 进行医学领域的命名实体识别 精确地使用以下模型 TF卡芒贝尔 https huggingface co jplu tf camembert base 然而 我在对任务模型进行微调时遇到了一些问题 因为我使
  • 使用编程约束时如何将 CAGradientLayer 添加到 UIView

    对于 Swift 中的 iOS 应用程序 我使用编程约束 并希望将 CAGradientLayer 添加到 UIView 下面是我的代码 它不起作用 import UIKit class ViewController UIViewContr
  • SDL:全屏半透明背景

    我正在尝试编写一个具有覆盖整个屏幕的半透明背景的程序 经过一些研究 SDL 似乎是最佳选择 我编写了代码来创建一个背景的全屏窗口 其 alpha 等于 100 满分 255 但由于某种原因它只绘制纯色 我做错了什么 Initialise S
  • 在 JSON.NET 中序列化 null

    通过 JSON NET 序列化任意数据时 任何为 null 的属性都会写入 JSON 如下所示 属性名称 空 这当然是正确的 但是我需要自动将所有空值转换为默认的空值 例如无效的strings 应该变成String Empty null i
  • PHP SimpleXML asXML写入ANSI编码文件

    我正在尝试将一些内容写入 XML 文件 但我确实遇到了特殊字符的问题 我想写的内容通过提交给脚本 GET 所以我假设它已正确解码为 UTF 8 内容 write GET content 将被喂食如下 file php content s F
  • Cordova 3.4 Android 本地视频文件无法播放

    我已经尝试了几天通过 cordova 3 4 应用程序在 Galaxy Tab 4 2 上播放本地视频文件 当我使用绝对 http url 时 视频播放得很好 这是我尝试过的 我将视频文件放入 asset res raw 文件夹中 如下所示
  • 确定 HSL 变化以将一种颜色转换为另一种颜色

    I use LESS 我想利用各种综合颜色函数 http lesscss org functions color operations允许仅设置几种基本颜色 然后派生其他变化色相 饱和度 亮度 旋转 ecc 假设我的着色器中有以下 2 种颜
  • JSX 错误:类型“JSX.IntrinsicElements”上不存在属性

    我将容器转换为 jsx 文件 但现在渲染方法中的 HTML 元素出现以下错误 类型 JSX IntrinsicElements div 上不存在属性 类型 JSX IntrinsicElements h1 上不存在属性 包 json nam
  • Laravel 4.2:MYSQL 超时。在哪里更改全球时间

    ErrorException PDO commit MySQL 服务器已经消失 这是我收到的消息 如果我在 xampp my ini 中设置所有变量 它不会改变任何东西 例子 innodb lock wait timeout 1 net r
  • Environment.SetEnvironmentVariable 需要很长时间才能在用户或计算机级别设置变量

    我在 C NET 3 5 中使用 Environment SetEnvironmentVariable 方法调用 如下所示 环境 SetEnvironmentVariable 环境变量 价值 机器 然而 在多个测试系统 运行 XP 和 Wi