无法在应用商店的沙盒 OSX 应用中使用 libproc
Unable to use libproc in a sandboxed OSX app for app store
我有一个 C++ 应用程序,它使用 libproc 获取打开的应用程序列表。未沙盒化时按预期工作。然而,要部署到应用程序商店,它必须被沙盒化,这样做时,proc_listallpids(来自 libproc)不再有效。不管怎样?
#include <libproc.h>
#include <stdio.h>
#include <string.h>
void find_pids()
{
pid_t pids[2048];
int bytes = proc_listallpids(pids, sizeof(pids));
int n_proc = bytes / sizeof(pids[0]);
for (int i = 0; i < n_proc; i++) {
struct proc_bsdinfo proc;
int st = proc_pidinfo(pids[i], PROC_PIDTBSDINFO, 0,
&proc, PROC_PIDTBSDINFO_SIZE);
printf("%s\n", proc.pbi_name);
}
}
int main()
{
find_pids();
return 0;
}
不,没有办法解决这个问题。
沙箱的目的是将您的应用程序与计算机上的其他进程隔离开来 运行。它通过阻止您的应用程序查看这些进程来正确地完成它的工作。
NSWorkspace.runningApplications 是获取有关 运行 应用程序(而不仅仅是进程)信息的更 Mac 的方式,它可能会在沙盒应用程序中工作。但一般来说,沙盒应用程序之间应该无法看到对方。
我有一个 C++ 应用程序,它使用 libproc 获取打开的应用程序列表。未沙盒化时按预期工作。然而,要部署到应用程序商店,它必须被沙盒化,这样做时,proc_listallpids(来自 libproc)不再有效。不管怎样?
#include <libproc.h>
#include <stdio.h>
#include <string.h>
void find_pids()
{
pid_t pids[2048];
int bytes = proc_listallpids(pids, sizeof(pids));
int n_proc = bytes / sizeof(pids[0]);
for (int i = 0; i < n_proc; i++) {
struct proc_bsdinfo proc;
int st = proc_pidinfo(pids[i], PROC_PIDTBSDINFO, 0,
&proc, PROC_PIDTBSDINFO_SIZE);
printf("%s\n", proc.pbi_name);
}
}
int main()
{
find_pids();
return 0;
}
不,没有办法解决这个问题。
沙箱的目的是将您的应用程序与计算机上的其他进程隔离开来 运行。它通过阻止您的应用程序查看这些进程来正确地完成它的工作。
NSWorkspace.runningApplications 是获取有关 运行 应用程序(而不仅仅是进程)信息的更 Mac 的方式,它可能会在沙盒应用程序中工作。但一般来说,沙盒应用程序之间应该无法看到对方。