2015-04-11 2 views
0

Пробовал поиск в Google, но не может найти никакой информации.Запуск pkg внутри dmg C++

Мне нужно выполнить файл pkg, который существует в файле dmg с помощью кода. Причина - обновление программного обеспечения. Я загружаю обновление через мое приложение (которое является dmg) и ему нужно его запустить. В Windows это довольно просто: запустите exe. Не удалось выяснить, как это сделать на Mac.

Что касается фреймворков, я использую wxWidgets с какао (если это помогает).

ответ

0

Я не знаю способ сделать это непосредственно с API, какао, но вы можете использовать внешние команды, чтобы сделать это: использовать /usr/bin/hdiutil attach /path/to/image.dmg смонтировать образ диска, а затем что-то вроде /usr/sbin/installer -package /Volumes/mountedvolume/installer.pkg -target / для установки пакета (см man installer для больше информации и вариантов). Обратите внимание: если пакет требует прав администратора для установки, вам нужно запустить команду installer с правами администратора.

EDIT: чтобы получить полный путь к установленному объему, вам, вероятно, придется проанализировать вывод hdiutil. Это будет выглядеть примерно так, хотя это будет в значительной степени зависеть от формата образа диска:

/dev/disk2    Apple_partition_scheme   
/dev/disk2s1   Apple_partition_map    
/dev/disk2s2   Apple_HFS      /Volumes/mountedvolume 
+0

Как получить 'mountedvolume' после вызова' hdiutil'? – Ash

+0

Спасибо, Гордон. Выключает '' то же, что и параметр '-volname', когда dmg был создан с использованием' hdiutil'. Поскольку мой файл pkg является установщиком на основе gui, я использую 'open' вместо' installer' для второй команды. – Ash

+0

@Ash, вы должны, вероятно, просто проанализировать вывод hdiutil - если/Volumes/imagename уже существует, он будет установлен как/Volumes/imagename 1 (с пробелом), поэтому, если вы попытаетесь открыть пакет from/Volumes/imagename вы либо получите файл не найден, либо вы откроете неправильный пакет. –

Смежные вопросы