【问题标题】:Run pkg within dmg C++在 dmg C++ 中运行 pkg
【发布时间】:2015-04-11 10:53:55
【问题描述】:

尝试在 Google 上搜索,但似乎找不到任何信息。

我需要通过代码执行一个存在于 dmg 文件中的 pkg 文件。原因是软件更新。我通过我的应用程序(这是一个 dmg)下载了更新并需要运行它。在 Windows 上,这非常简单:运行 exe。无法弄清楚如何在 Mac 上实现这一目标。

就框架而言,我将 wxWidgets 与可可一起使用(如果有帮助的话)。

【问题讨论】:

    标签: c++ macos dmg pkg-file


    【解决方案1】:

    我不知道直接使用 cocoa API 执行此操作的方法,但您可以使用外部命令来执行此操作:使用/usr/bin/hdiutil attach /path/to/image.dmg 挂载磁盘映像,然后使用/usr/sbin/installer -package /Volumes/mountedvolume/installer.pkg -target / 之类的方法安装包(请参阅man installer 了解更多信息和选项)。请注意,如果安装包需要管理员权限,您需要以 root 身份运行 installer 命令。

    编辑:要获取已安装卷的完整路径,您可能必须解析 hdiutil 的输出。它看起来像这样,尽管它在很大程度上取决于磁盘映像的格式:

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

    【讨论】:

    • 调用hdiutil后如何获取mountedvolume
    • 谢谢戈登。原来<mountedvolume> 与使用hdiutil 构建dmg 时使用-volname 参数设置的相同。由于我的 pkg 文件是基于 gui 的安装程序,因此我使用 open 而不是 installer 作为第二个命令。
    • @Ash 您可能应该解析 hdiutil 的输出以确定 - 如果 /Volumes/imagename 已经存在,它将被挂载为 /Volumes/imagename 1 (带有空格),所以如果您尝试从 /Volumes/imagename 打开包,您将找不到文件,或者您将打开错误的包。
    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多