在mac上保存交叉应用程序信息的位置

时间:2012-01-11 14:42:01

标签: java macos registry

我有应用程序A需要启动应用程序B.

用户可以选择安装B的位置。这意味着我需要一种方法让A知道B所在的路径。

B和A是单独安装的,不能保证首先安装哪一个,甚至安装两个。

这意味着B的安装程序必须在某个公共场所写入安装B的路径,以便A稍后可以读取并找到B.

我的应用程序是用Java编写的,可能同时安装在Windows和Mac上。

在Windows上,解决方案是将路径写入注册表。我是Mac的新手。在Mac上执行此操作的正确方法是什么。

一个应用程序在哪里写入另一个应用程序可以读取的数据?

谢谢, 沙哈尔

4 个答案:

答案 0 :(得分:2)

我的回答是:

取决于应用程序是在每用户上下文还是每台计算机(即所有用户)上下文中运行。

这似乎是某种偏好或设置,您希望将偏好文件写入用户的“偏好设置”文件夹,该文件夹通常位于/Users/_______/Library/Preferences/(填写_____空白处使用用户的帐户名称。)

我不确定这是否适用于Java。如何安装Java应用程序?从浏览器下载或?

答案 1 :(得分:0)

您可以修改安装程序以编写系统环境变量,例如PROD_B_HOME。然后,您可以从Java中读取变量。

来自:http://docs.oracle.com/javase/tutorial/essential/environment/env.html

在Java平台上,应用程序使用System.getEnv来检索环境变量值。如果没有参数,getEnv将返回java.util.Map的只读实例,其中映射键是环境变量名称,映射值是环境变量值。这在EnvMap示例中进行了演示:

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n",
                              envName,
                              env.get(envName));
        }
    }
}

答案 2 :(得分:0)

要成为“本机”,您可以调用Launch Services来查找基于其Bundle ID的应用程序 - 这要求“找到”的应用程序位于.app包中且具有正确的({{ 1}} type)已分配的标识符。您应该能够从shell脚本中调用com.yourname.appname - 似乎有一个小的二进制包装器。

答案 3 :(得分:0)

通常,安装在Mac上的应用程序信息存储在“收据”文件夹下。

  • for Mac 10.6:/ private / var / db / Receipts,
  • for Mac 10.5:/ Library / Receipts /,

所以你不必在B的安装程序中做任何不同的事情,你可以简单地浏览上面的收据文件夹并找到A中任何语言的相关包(* .pkg),该应用程序的真实路径可以可以在.pkg文件的内容文件夹下的 info.plist 文件中找到。

希望它有所帮助。