gpt4 book ai didi

python - 设置环境变量以用于 getenv(不是 GetEnvironmentVariable)

转载 作者:行者123 更新时间:2023-12-05 04:18:29 24 4
gpt4 key购买 nike

我有一个 DLL 使用 getenv 获取启动选项( <stdlib.h> ) 电话。我想在打开 DLL 之前在同一个进程中设置该变量,以便可以通过 getenv 访问它。 .我应该使用哪个函数来设置它?

我了解到windows下有两组环境变量:一组是通过win32 API(GetEnvironemntVariable,SetEnvironmentVariable)操作的,另一组可以使用getenv读取。 , 并且可能通过 _putenv 设置, 那是我应该使用的那个吗?

这个函数是否可以从 python 访问,也许是通过 ctypes?

最佳答案

目前 ~VS2019 的情况似乎是:

  • 调用 getenv 函数从 MS CRT 在加载时初始化的 block 中检索值。
  • 调用 GetEnvironmentVariable 从进程环境 block 中检索值。
  • 调用 SetEnvironmentVariable 更新进程环境 block 中的值。 getenv 不会看到这些更改。
  • 调用putenv 更新两者 CRT block 中的值并且还另外调用Win32 SetEnvironmentVariable 来更新process environment block .

所以,实际上不管你用它做什么:

  • 使用 _wputenv_s 设置环境变量 - 它会同时更新两者。
  • 使用 ::GetEnvironmentVariableW 读取:它将从环境 block 中读取,无论使用哪种方法,它都将包含值。

关于getenv

如果使用 getenv 的代码使用的是与您的代码相同的 MS CRT -- 也就是说,该代码动态链接到 CRT 并且实际上使用与您相同的版本,那么您始终可以使用 putenv

如果 DLL(及其 CRT)是动态加载或延迟加载的,并且您能够在加载 dll 之前调用 putenv,那么您可以使用它。

(这是推测,我还没有完全测试过:)如果 DLL 已经加载到您的进程中,并且它使用静态链接的 CRT,或者不同于您正在使用的 CRT,那么 its getenv 调用已经加载,您在 DLL 边界一侧所做的任何事情都不会改变它。我想在这种情况下运气不好。

引用:

关于python - 设置环境变量以用于 getenv(不是 GetEnvironmentVariable),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13742429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com