如何解决在启动应用程序 macOS 之前运行自定义代码
在从 Spotlight 或 Applications 文件夹启动应用程序之前,我在运行某些 C 代码时遇到问题。我想我应该能够用我的代码创建一个可执行文件,在完成所有计算之后,我调用 execvp()
来运行原始应用的可执行文件,然后它将替换当前进程。
我编译了 .c 文件并为它提供了原始应用程序的可执行文件名称(在我的情况下为 clion),然后从终端执行它.. 太好了,它有效!.. 直到我尝试打开Spotlight(或 Finder)中的应用程序包
由于某种原因,execvp()
调用失败,原始程序继续运行,但我的自定义可执行文件确实被 Spotlight 调用了!甚至使用 fork()
制作子进程都不起作用,system()
调用也不行。这里可能有什么问题?
CLion 的目录文件夹:clion 是我的可执行文件,clion-real 是原始的可执行文件
-rwxr-xr-x 1 marc admin 8700 22 Mai 10:35 clion
-rw-r--r-- 1 marc admin 550 22 Mai 10:35 clion-fake.c
-rwxr-xr-x@ 1 marc admin 128353 21 Mai 12:56 clion-real
clion-fake.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char** argv) {
system("say 'called'");
char* args[] = {"./clion-real",NULL};
int status = execvp(args[0],args);
system("say 'Failed'");
return 0;
}
当从终端调用 ./clion
时,它按预期工作,系统显示 Called 并且应用程序打开,但是当从 Spotlight 打开 .app 时,它显示两个 Called em> 和 Failed,表示 execvp()
调用失败。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。