微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在启动应用程序 macOS 之前运行自定义代码

如何解决在启动应用程序 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 举报,一经查实,本站将立刻删除。