启动前为进程设置环境变量

2023-12-11

我有以下情况:

我有 Mac OS 捆绑包,其中包含使用一些第三方动态库的应用程序,这些库依赖于一些环境变量,让我们命名它ENV_VAR。我想设置ENV_VAR仅对我的应用程序具有某些值,因为如果我为整个系统设置它,可能会破坏其他一些应用程序。它应该对用户透明地工作,即他只需双击应用程序文件夹即可运行我的应用程序。我怎样才能实现它?

注意:动态库是在主函数启动之前加载的,因此在主函数中设置此变量没有帮助。


您可以添加一个键“LSEnvironment”到您的应用程序包的 Info.plist。该值可以是包含键和值字符串的字典,当您的应用程序通过 Launch Services 启动时(例如从 Finder 或 Dock 但不是从终端启动),这些键值对将添加到环境中。

<key>LSEnvironment</key>
<dict>
    <key>ENV_VAR</key>
    <string>value</string>
</dict>

然而,在我的测试(在 Snow Leopard 上)中,测试有点不稳定,至少在编辑现有应用程序的 Info.plist 时是这样。基本上,Launch Services 在第一次遇到应用程序时会缓存应用程序 Info.plist 的这一部分,并且不一定会识别磁盘上的更改。有时,您可以通过复制应用程序包或暂时将其移动到其他文件夹等方式提示它重新读取 Info.plist。当然,过度的解决方案是使用lsregister刷新并重建缓存:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -seed

此缓存问题不会影响您的最终用户,只会影响您调整 Info.plist 时的情况。此外,如果您在源 Info.plist 中进行更改,然后使用 Xcode 构建应用程序,它也不会对您产生影响。

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

启动前为进程设置环境变量 的相关文章

随机推荐

  • 使用 `seaborn.objects` 堆叠到 100%

    我正在尝试绘制一个图 其中条形或区域使用新的比例调整为 100 seaborn objects界面 我似乎无法理解so Norm 工作 无论有没有by 这是我到目前为止所得到的 import seaborn as sns import se
  • 测试向量的所有元素是否相等

    我想测试非空向量是否包含相同的元素 这是最好的方法吗 count vecSamples begin 1 vecSamples end vecSamples front vecSamples size 1 在 c 11 中 或升压算法 std
  • Pygame OpenGL 3D 立方体滞后

    我正在关注 pyOpenGL 上相当老的教程系列 我正在做的和他完全一样 然而我遇到了延迟 我有带有 8GB 内存的 AMD FX 6300 GTX 1050ti 并且文件存储在闪存驱动器上 我读过一些地方使用glBegin and glE
  • 八顶点立方体的法向量

    我正在使用 WEBGL 今天遇到了我的立方体顶点法线的问题 我用立方体网格检查了我的代码来自互联网而且效果很好 问题是 来自互联网的立方体有 24 个顶点 每个面 4 个顶点 6 个面 我认为这对于我的立方体来说太多了 摆弄我的立方体 Fi
  • 如何查询DOTNET_CLI_TELEMETRY_OPTOUT是否永久设置为TRUE?

    如果我输入 set DOTNET CLI TELEMETRY OPTOUT 1 or setx DOTNET CLI TELEMETRY OPTOUT 1 要永久保存此设置 则应将设置 DOTNET CLI TELEMETRY OPTOUT
  • 如何在CSV文件中同时转义逗号和双引号?

    我正在编写一个 Java 应用程序以将数据从 Oracle 导出到 csv 文件 不幸的是 数据的内容可能相当棘手 逗号仍是分隔符 但行上的某些数据可能如下所示 ID FN LN AGE COMMENT 123 John Smith 39
  • 阻止过期的访问令牌从资源服务器检索数据

    我一直在摆弄 IDS 4 但遇到了一个小问题 我将令牌生命周期设置为大约 15 秒 即使它们已过期 我仍然可以从资源服务器检索日期 如果我从客户端调用的标头中删除令牌 则会收到 401 错误 Client Authorize public
  • 尝试替换数据框中的特定值,但不覆盖它

    我的数据框看起来像这样orders total price amount side 0 0 003019 100 bids 0 0 003143 100 asks 当我尝试通过执行以下操作来替换特定值时 orders total order
  • powershell Get-ChildItem 结果数组

    Get ChildItem File Recurse Path path Fullname返回全名数组 Get ChildItem File Recurse Path path Name返回文件名数组 但 Get ChildItem Fil
  • 进度对话框不出现

    我的活动中有以下内容 我用它来下载用户的 LoveFilm 队列中的电影 但 ProgressDialog 从未出现 public class MyListActivity extends Activity SharedPreference
  • 将字节数组[十六进制]转换为字符数组或字符串类型+ Arduino [重复]

    这个问题在这里已经有答案了 我需要将十六进制字节数组转换为字符串 例如 byte array 4 0xAB 0xCD 0xEF 0x99 array 0 0xAB array 1 0xCD array 2 0xEF array 3 0x99
  • jqGrid拖放接收事件

    我正在使用jqgrid拖放 我有两个表表A和表B 我从表A中拖动一行并放入表B中 我想捕获表中收到的新行ID和数据 是否有任何接收事件在 jqGrid 中 您可以定义ondrop事件函数 参见此Link 像下面这样 jQuery table
  • C++ - thread_local 向量导致 MinGW 上的 join() 崩溃

    include
  • 通过引用返回。返回变量周围的括号

    http php net manual en function return php 通过引用返回时 切勿在返回变量周围使用括号 因为这是行不通的 您只能通过引用返回变量 而不能返回语句的结果 如果使用 return a 那么你返回的不是变
  • 获取 Javascript 中其他位置的偏移量

    我在亚洲 我想计算澳大利亚的偏移量 我知道如何计算偏移量的值 代码如下 var timezone offset new Date getTimezoneOffset 但其他地点如何计算呢 有人可以指导我吗 虽然这can如果要在一个简短的函数
  • 在linux终端中编译c++文件:string_view:没有这样的文件或目录

    我有 gcc Cadence 4 8 3 我想编译一个包含 string view 的 C 文件 当我编译文件时 g script cpp 出现以下错误 script cpp 4 23 fatal error string view No
  • Android - 使用push()插入多个标记

    我可以在地图上插入多个标记 但是 当我插入 Firebase 数据库时 只有最后放置的标记被插入 我想我必须使用某种列表或哈希图 POJO类 public class FirebaseMarker String address String
  • 在 python 脚本中使用 youtube-dl 仅从 youtube 视频下载音频

    有一个few posts on 下载音频来自 YouTube 使用youtube dl 但没有一个是具体的或太有帮助的 我想知道从 Python 脚本中执行此操作的最佳方法是什么 例如 以下是下载视频的 README 示例 import y
  • Python - 沃尔玛的网络抓取

    我正在尝试从中获取一些数据Walmart使用 Python 和 BeautifulSoupbs4 简而言之 我编写了一段代码来获取所有类别名称并且有效 import requests from bs4 import BeautifulSou
  • 启动前为进程设置环境变量

    我有以下情况 我有 Mac OS 捆绑包 其中包含使用一些第三方动态库的应用程序 这些库依赖于一些环境变量 让我们命名它ENV VAR 我想设置ENV VAR仅对我的应用程序具有某些值 因为如果我为整个系统设置它 可能会破坏其他一些应用程序