【问题标题】:Detecting Unix home in Wine application在 Wine 应用程序中检测 Unix home
【发布时间】:2014-06-01 21:41:56
【问题描述】:

我的 Windows 应用程序经常在 *nix 上使用 Wine。

由于它是一个以文件为中心的应用程序,它经常使用(并呈现给用户)Windows“文档”文件夹(使用CSIDL_PERSONAL 解决)。不幸的是,在 Wine 下,它指向通常为空且未使用的虚假 Wine/Windows 目录。我想将用户指向他的 Unix 主文件夹。

有什么可靠的方法可以找到它在 Wine 下的位置吗?

我希望我可以读取 HOME 环境变量,但它没有导出(与大多数其他变量相反)到 Windows 环境。

目前我正在使用Z:\home\%USERNAME% 猜测家庭。但这在我看来并不可靠。

如果找不到主目录,是否至少有一种方法可以检测 Wine 根驱动器(默认为Z:),所以我不需要对路径的驱动器部分进行硬编码?

【问题讨论】:

  • 我认为这属于超级用户或linux。
  • 我从未尝试过,但我至少会尝试使用 CSIDL_PROFILE 的 SHGetFolderPath。
  • @PressingOnAlways 我很确定我无法从环境(或其他高级用户级界面)中检测到它。所以我希望有一些API。因此它属于这里,afaik。
  • @Martin: CSIDL_PROFILE != CSIDL_PERSONAL。 “我的文档”文件夹没有标准化的 Unix 等价物,但 Unix 上的配置文件目录是 ~。也许它无论如何都会返回一些假目录,但我会试一试(另一种可能性是它返回一个“奇怪”的目录,它实际上是一个指向主目录的符号链接)。

标签: unix wine home-directory


【解决方案1】:

在 Wine 驱动器中,Z: 始终映射到根目录 (/),因此您的检测方式很酷。但是如果用户这样做了

rm ~/.wine/dosdevices/z\:

这当然行不通。在葡萄酒邮件中,有一个 discussion 关于 Z: 映射的安全隐患。

【讨论】:

【解决方案2】:

由于缺乏更好的答案,我正在分享我当前的解决方法/hack:

对于 *nix 平台,我可以控制部署(尤其是 OS X),我将HOME 环境变量从启动脚本复制到另一个变量(比如WINE_HOME)。大多数环境变量(HOME 除外)都导出到 Windows/Wine 环境。所以我可以从我的应用程序中读取WINE_HOME,添加Z:\ 并将斜杠转换为反斜杠。

对于我无法控制部署的平台,我只能使用USERNAME 变量来猜测主目录为Z:\home\%USERNAME%。这在 OS X 上尤其不适用,因为家在 /users 而不是 /home

编辑:我发现了一个问题Get Wine path of file 有点帮助。在 *nix 中,您可以使用 winepath -w ~ 获取 Z:\home\username。但是在 Windows 环境中运行相同的程序并不能解决 ~。您至少可以运行winepath -w /home/username 以获取Z:\home\username 以找出Wine 根的驱动器(以防它不是默认的Z:\)。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多