如何通过Java在Mac上运行dmg文件

3
请告诉我如何在Java中运行/调用.dmg应用程序。 我使用以下语法: Runtime.getruntime.exec(“sample.dmg”)但它会抛出错误"permission denied",并显示错误代码13。 请告诉我如何调用dmg文件。

你是在小程序或者其他受限制权限的环境下运行这个程序吗? - corsiKa
2个回答

7

DMG文件不能直接执行。你需要使用Mac OSX的open命令:

Runtime.getRuntime().exec(new String[] { "/usr/bin/open", "sample.dmg" });

您可能需要完整的 dmg 文件路径,但除此之外,它对我来说似乎工作得很好。打开还允许您指定要打开的应用程序,因此您可以做一些很酷的事情,例如在邮件应用程序中将此文档作为附件发送。
Runtime.getRuntime().exec(
    new String[] { "/usr/bin/open", "-a", "Mail", "letter.pdf" });

我经常使用Mac命令中的“open”来完成这项工作。

3
您应该使用Desktop.open(File file),它将使用适用于操作系统的适当打开程序。在您的情况下,在Mac上它将使用open。这比使用Runtime.exec更好,因为您不依赖于open命令的确切位置。此外,即使Windows有DMG挂载应用程序(如Mediafour的MacDrive),这也可以工作。

最重要的是使用Desktop.open(File file)以使用操作系统的默认打开程序打开文件,这就是它存在的原因。大多数人只在万不得已时才使用Runtime.exec


但问题特指于 OS X 和 .dmg 文件。此外,OS X 保证 open 命令位于该位置,就像类 Unix 操作系统保证执行 kill -9 命令意味着立即强制终止,并返还应用程序使用的所有资源一样。 - Cedric Martin
1
@CedricMartin:所以,他应该使用不太方便和可靠的选项,只是因为在他的情况下它不会出问题吗? - millimoose
@Inerdia:不要让我说出我没有说过的话。我说过,OS X和Unx都做出了保证(不像某些操作系统)。当你保证在/usr/bin/open/找到open命令,并且问题的整个重点是打开一个.dmg文件(.dmg是Windows完全陌生的概念)时,仅仅因为“找不到open命令”和“如果他不是用Mac”的情况就使用Desktop.open不仅是徒劳无功和毫无意义的,而且会误导人,让人误以为OP想在Windows上打开.dmg文件。Desktop.open是可以的。不要通过让它听起来像OP想在Windows上打开.dmg*文件来为它辩护。 - Cedric Martin
@CedricMartin,我不相信操作系统会保证openkill的位置。是的,它们在众所周知的位置上安装,但没有阻止任何人移动或重命名这些文件。 - Steve Kuo
@SteveKuo:因此破坏了许多实用程序...顺便说一下,关于kill,我是在谈论确保“kill -9”能够立即终止应用程序,不经询问,并释放应用程序使用的资源。 - Cedric Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接