在Wine应用中检测Unix主目录

9
我的Windows应用程序经常在*nix上使用Wine。由于它是一个以文件为中心的应用程序,因此它经常使用(并向用户呈现)Windows“文档”文件夹(使用CSIDL_PERSONAL解析)。不幸的是,在Wine下,它指向通常是空的未使用的虚假Wine / Windows目录。我想把用户指向他的Unix主文件夹。有没有可靠的方法找出Wine下的位置?我希望我可以读取HOME环境变量,但它没有导出(与大多数其他变量相反)到Windows环境。目前,我正在猜测使用Z:\ home \%USERNAME%的主目录。但我觉得这不够健壮。如果没有找到主目录的方法,那么是否至少有一种检测Wine根驱动器(默认为Z:)的方法,因此我不需要硬编码路径的驱动器部分?

1
我认为这个问题应该发到Superuser或Linux板块。 - PressingOnAlways
@PressingOnAlways 我非常确定我无法从环境(或其他高级用户界面)中检测到它。因此,我希望有一些API。就我所知,它应该属于这里。 - Martin Prikryl
这些是否有帮助?http://www.winehq.org/docs/wineusr-guide/environment-variables - PressingOnAlways
@Martin: CSIDL_PROFILE != CSIDL_PERSONAL。在Unix中,“我的文档”文件夹没有标准化的等效项,但在Unix上的个人资料目录是~。也许它会返回一些虚假目录,但我建议尝试一下(另一个可能性是它返回一个“奇怪”的目录,实际上是一个符号链接到主目录)。 - Matteo Italia
@MatteoItalia 对不起,我没有注意到您提到了不同的 CSIDL*。但是正如预期的那样,CSIDL_PROFILE 指的是 C:\users\%USERNAME% - Martin Prikryl
显示剩余6条评论
2个回答

9

由于缺乏更好的答案,我分享一下目前的解决方法:

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

对于我无法控制部署的平台,我只能使用USERNAME变量来猜测home目录,比如Z:\home\%USERNAME%。这在OS X上特别不起作用,因为home目录位于/users而不是/home

编辑:我找到了一个问题Get Wine path of file,它有点有帮助。在*nix上,您可以使用winepath -w ~来获取Z:\home\username。但是,从Windows环境中运行相同的命令无法解析~。您至少可以运行winepath -w /home/username来获取Z:\home\username,以找到Wine根目录的驱动器(如果它不是默认的Z:\)。


2
在 Wine 中,Z: 驱动器总是映射到根目录(/),因此您的检测方法很棒。但是,如果用户执行以下操作

rm ~/.wine/dosdevices/z\:

这当然行不通。在 Wine 邮件列表中,有一个 discussion 关于 Z: 映射的安全性问题。

1
你实际上可以使用winecfg/映射到任何驱动器。请参阅https://wiki.winehq.org/Wine_User%27s_Guide#Drive_Settings(重新发布带有更新链接的评论-最初发布于2014年4月)。 - Martin Prikryl

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