Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在mac上保存跨应用程序信息的位置_Java_Macos_Registry - Fatal编程技术网

Java 在mac上保存跨应用程序信息的位置

Java 在mac上保存跨应用程序信息的位置,java,macos,registry,Java,Macos,Registry,我的应用程序A需要启动应用程序B 用户可以选择安装B的位置。这意味着我需要一种方法让a知道B所在的路径 B和A是分开安装的,不能保证先安装哪一个,甚至不能保证两者都已安装 这意味着B的安装程序必须将安装B的路径写入某个公共场所,以便A可以稍后读取并找到B 我的应用程序是用Java编写的,可能同时安装在Windows和Mac上 在windows上,解决方案是将路径写入注册表。我是麦克的新手。在Mac上这样做的正确方法是什么 一个应用程序在哪里可以写入另一个应用程序可以读取的数据 谢谢, 沙哈尔我的

我的应用程序A需要启动应用程序B

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

B和A是分开安装的,不能保证先安装哪一个,甚至不能保证两者都已安装

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

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

在windows上,解决方案是将路径写入注册表。我是麦克的新手。在Mac上这样做的正确方法是什么

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

谢谢,
沙哈尔

我的回答是:

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

这似乎是您希望将首选项文件写入用户“首选项”文件夹的某种首选项或设置,该文件夹通常位于
/Users/\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


但我不确定这在Java上是否可行。Java应用程序是如何安装的?从浏览器下载或?

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

发件人:

在Java平台上,应用程序使用System.getEnv检索环境变量值。没有参数,getEnv返回java.util.Map的只读实例,其中Map键是环境变量名,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));
        }
    }
}
import java.util.Map;
公共类环境映射{
公共静态void main(字符串[]args){
Map env=System.getenv();
for(字符串envName:env.keySet()){
System.out.format(“%s=%s%n”,
我的名字,
env.get(envName));
}
}
}

要成为“本机”,您可以调用Launch Services根据其捆绑包ID查找应用程序-这要求要“查找”的应用程序位于
.app
捆绑包中,并分配了正确的(
com.yourname.appname
类型)标识符。您应该能够从shell脚本调用
LSFindApplicationForInfo
,它似乎有一个小的二进制包装器。

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

  • 对于Mac 10.6:/private/var/db/Receipts
  • 对于Mac 10.5:/Library/Receipts/
因此,您不必在B的安装程序中执行任何不同的操作,只需浏览上面的receipts文件夹,找到A中任何语言的相关软件包(*.pkg),该应用程序的实际路径可以在该.pkg文件的contents文件夹下的info.plist文件中找到


希望有帮助。

我至少会为每个操作系统设置默认路径,这样用户就不必选择安装的位置,然后您的程序就可以搜索这些初始默认值。应用程序为所有用户安装一次,并按用户运行(这是一个UI应用程序)。用户从磁盘而不是从internet安装应用程序。我认为
首选项
应该只包含
plist
文件。如果您想要自由格式数据的目录(可能在跨平台应用程序中),我建议
~/Library/Application Support/
Hi@EdwardThomson;当然,“应用程序支持”也会起作用(我不记得在哪里见过苹果公司更喜欢
Preferences
中的所有文件都是plist,tho)。如果Shahar是从磁盘安装的,他可能会使用Mac特定的PackageMaker安装程序(whee!),然后他可以随时拥有root/admin访问权限,将设置文件安装到
/Library/Application Support/
(或
/Library/Preferences
)中,这些位置用于在计算机的所有用户之间共享设置。