我在 wine-3.1 下的 Ubuntu 16.04 中使用PDFXCview.exe。
当我将 pdf 文件指定为 的参数时PDFXCview.exe
,pdf 文件的绝对路径名不会PDFXCview.exe
找到 pdf 文件,而 pdf 文件的相对路径名可以。
例如:
wine /path/to/PDFXCView.exe my.pdf
将my.pdf
在 PDFXCView.exe
, 而
wine /path/to/PDFXCView.exe "$PWD"/my.pdf
没有。
绝对路径参数
PDFXCView.exe
仅由使用,而不是由 使用wine
,因此将绝对路径转换为可识别的葡萄酒路径没有帮助。例如,wine /path/to/PDFXCview.exe "$(winepath /tmp/test/O.pdf)"
不PDFXCview.exe
查找并打开 pdf 文件,其中 .the wine-recognizable path 是:$ echo wine /path/to/PDFXCview.exe "$(winepath /tmp/test/O.pdf)" wine /tmp/test/PDFXCview.exe /home/t/.wine/dosdevices/z:/tmp/test/O.pdf
- 相反,当我将文本文件指定为 的参数时
notepad.exe
,我可以指定文本文件的绝对路径名或相对路径名,并且notepad.exe
可以找到要打开的文本文件。例如,两者都wine notepad "$PWD"/note
可以wine notepad note
让记事本找到并打开文本文件note
。
以上情况是否也适用于其他人?
PDFXCview.exe
无法识别其参数的绝对路径名,而只能识别相对路径名的原因是什么?
我想知道上述问题PDFXCview.exe
是因为程序本身还是因为酒?我没有要测试的 Windows,也想知道PDFXCview.exe
在 Windows 中的行为是否与在 Wine 中相同。
谢谢。
Drive 标签的屏幕截图winecfg
您正在为 Wine 正在执行的 Windows 可执行文件提供绝对Linux 风格的路径,而不是将该路径参数提供给 Wine 本身。因此,您必须将路径之后的每个参数都
.exe
视为 Windows 样式的参数(即wine /home/$USER/.wine/drive_c/path/to/Windows/executable.exe [Windows Style Arguments]
)。完整的 Linux 样式路径适用于
notepad.exe
,但考虑到notepad.exe
它可能不是纯 Windows版本的记事本,它包含在 Wine 设置中,并且可能经过调整以接受 Linux 路径(如/tmp/test/O.pdf
)。然而,大多数
wine
可以执行的应用程序都没有这些调整,因此只接受 Windows 样式的路径。因此,您需要为这些应用程序提供一个 Windows 样式的路径,格式类似于C:\Windows\System32\...
但与文件的实际位置有关,并且与 Wine 中的驱动器映射有关,同时考虑到 Bash / Linux 控制台样式解释*的路径。首先,找到驱动器映射以及它们在 Linux 文件基础架构中“存在”的位置。 为此,请加载
winecfg
,然后在 Wine 配置窗口中,转到“Drives”选项卡。它看起来像这样:如您所见,我有
C:
它映射到 Winedrive_c
目录,在这种情况下位于/home/teward/.wine
. 我还有一个M:
映射到我的/mnt/
目录的驱动器,这是相关的,因为我M:\
在 Wine 应用程序中引用了一些东西。最相关的是
Z:
映射,它映射到我的 Linux 环境中的根/
分区。这通常是默认映射,但不一定会在您的环境中(因此请确保它是)。无论哪个 Wine 驱动器映射到/
,您都需要使用。如果一个不存在,您将需要添加一个与/
您使用 Windows 应用程序打开的数据实际所在的目录或实际目录匹配的驱动器映射。从技术上讲,您可以先T:
映射到/tmp/
然后再做T:\0.pdf
,但我并没有假设我的答案是这样。因此,出于此答案的目的,我将假设它
Z:
实际上已映射到/
并从现在开始在我的答案中使用它。您需要采用 Linux 路径并将其从
Z:\
驱动器根目录转换为 Windows 样式。因此,对于/tmp/test/0.pdf
在 Linux 中,您实际上会给出它'Z:\tmp\test\0.pdf'
(包括单'
引号,因此 shell 不会混淆路径的解释*)。通过这种方式,Windows 风格的应用程序获得了它可以读取和理解的路径,而不是它不能的路径。很少有 Wine 应用程序实际上能够理解
/foo/bar/baz
Linux 的样式路径,并且大多数能够理解的应用程序都是在开始设置 Wine 时进行调整和安装的。因此,最好为在 Wine 中运行的 Windows 应用程序提供 Windows 风格的路径,而不是 Linux 风格的路径。* 当我提到“解释”时,我指的不是路径
:
,而是\
路径中的那个。尽管您的路径不包含空格,但我也指的是空格。在 Bash 语法中,\
用作转义字符的一部分。此外,在命令行中,参数以空格分隔,因此它不知道如何处理路径中的空格,因此您必须使用反斜杠对其进行转义。因此,对于会是什么C:\Program Files\Foo\bar.exe
,您实际上必须投入C:\\Program\ Files\\Foo\\bar.exe
路径。但是,使用默认的 Bash shell,您可以通过用单引号 ( ) 包裹路径来否定这种对斜杠和空格的误解,单引号 ('
) 将其视为传递的全部文字参数,'C:\Program Files\Foo\bar.exe'