macOS запрашивает разрешение на родительский процесс узла вместо дочернего

#javascript #node.js #macos

Вопрос:

Используя модуль child_process, я пытаюсь создать процесс, который должен запрашивать разрешения, но macOS запрашивает разрешения для родителя, а не для порожденного ребенка.

Например, когда я выполняю приведенный ниже код в терминале, macOS запросит разрешение для «Terminal.app» вместо дочернего. То же самое происходит с функциями exec/execFile.

Пример из реальной жизни-удалить разрешения на микрофон из Google Chrome, запустить код ниже в терминале и перейти в Google meet. macOS запросит разрешения на микрофон для Terminal.app вместо Google Chrome.

Можно ли использовать модуль child_process и заставить macOS запрашивать разрешения для ребенка?

 const { spawn } = require("child_process");
const APP_PATH = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
spawn(APP_PATH, [], {
  detached: true,
  stdio: "ignore",
}).unref();
 

Комментарии:

1. Добавьте в параметры env: { title: 'childprocess'} , процесс порождения наследует большинство родительских параметров , мне любопытно, изменится ли название дочернего процесса, если это произойдет, то он будет работать так, как задумано.

2. К сожалению, это не помогло, macOS запросил передачу данных «Терминал.приложение».

3. Можете ли вы опубликовать APP_PATH содержимое ?

4. Он работает с любым приложением, которому требуются разрешения, я обновил вопрос с помощью примера Google Chrome

5. Я поставил скрипку с демо-версией, это может дать вам представление, если это не сработает. Это основное приложение, которое запускает отдельный экземпляр узла, который создаст ваш путь к приложению. https://jsfiddle.net/95et82bq/

Ответ №1:

Я верю, что ваш ответ здесь;

https://dzone.com/articles/understanding-execfile-spawn-exec-and-fork-in-node

У вас есть другие варианты, такие как execFile , exec , fork кроме spawn .

Вилка должна работать без каких-либо вложений.

Ответ №2:

Открыть Chrome с помощью Apple работает скрипт.

 const { spawn } = require("child_process");

spawn('osascript', ['-e', 'tell application "Google Chrome" to activate'], 
{
  detached: true,
  stdio: "ignore",
}).unref();
 

введите описание изображения здесь