electronJS / 检测外部应用程序是不是正在运行 (MacOS) (沙盒) (MAS)

Posted

技术标签:

【中文标题】electronJS / 检测外部应用程序是不是正在运行 (MacOS) (沙盒) (MAS)【英文标题】:electronJS / Detect if foreign app is running (MacOS) (Sandbox) (MAS)electronJS / 检测外部应用程序是否正在运行 (MacOS) (沙盒) (MAS) 【发布时间】:2022-01-15 17:07:56 【问题描述】:

是否可以在 electronJS 中检测特定应用是否在 MacOS 上运行?

我想检查一下,如果 Mail.app 已打开且它很重要,代码是否在 Mac Apple Store (MAS) 中的 沙盒模式 中工作。 p>

在 AppKit 中可以使用 var runningApplications: [NSRunningApplication] get https://developer.apple.com/documentation/appkit/nsworkspace/1534059-runningapplications

我写了一段代码,可以用,但在沙盒中不行,终端命令是不可能的:

 import  exec  from "child_process";
 ...

 isRunning(query: string): Promise<unknown> 
    return new Promise((resolve, reject) => 
        const cmd = `ps aux | grep "$query" | grep -v grep`;


        exec(cmd, (err, stdout, stderr) => 

            if (stderr) 
                reject(stderr);
                return false;
            

            const lines = stdout.split("\n");
            let active = null;
            let pid = null;

            for (let index = 0; index < lines.length; index++) 
                const line = lines[index];

                if (
                    line.indexOf(query) !== -1 &&
                    line.indexOf(USERNAME) !== -1

                ) 
                    active = line;
                    break;
                
            

            if (active) 
                const activeData = active.replace(/(\s+)/g, '\t').split('\t');
                pid = activeData.length > 2 ? activeData[1] : null;
            

            resolve(pid);
        );
    );


this.isRunning('Mail.app/Contents/MacOS/Mail').then(pid => 
    if (pid) 
       // kill the app? ???? 
     else 
        resolve(null);
    
, reject);

有没有人为在 MAS 沙箱中工作的 electronJS 提供更好的解决方案?

【问题讨论】:

【参考方案1】:

我找到了解决办法:

const script = `
if application "Mail" is running then
    copy "true" to stdout
else
    copy "false" to stdout
end if
`;

exec(`osascript -e '$script'`,  (err, stdout, stderr) => 
    if (stderr) console.log("error", stderr); return;

    console.log("stdout", stdout);
);

【讨论】:

以上是关于electronJS / 检测外部应用程序是不是正在运行 (MacOS) (沙盒) (MAS)的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 ElectronJS 应用程序的默认图标?

应用程序是不是可以通过 TestFlight 检测它是不是安装为“外部测试”

Electronjs - BrowserWindow 不是渲染器进程中的构造函数错误

检测是不是使用外部 JavaScript 文件创建了 html 元素

当应用程序在后台时,苹果是不是允许声音检测?

如何可靠地检测 iOS 9 上是不是连接了外部键盘?