9

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

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

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

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

目前我猜测家庭使用Z:\home\%USERNAME%. 但这对我来说看起来并不强大。

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

4

2 回答 2

9

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

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

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

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

于 2014-04-25T05:57:05.367 回答
2

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

rm ~/.wine/dosdevices/z\:

这当然行不通。在 wine mailing 中,有一个关于映射的安全含义的讨论。Z:

于 2014-04-22T07:25:03.030 回答