Эта программа Windows, запущенная под Wine, не распознает абсолютный путь к ее аргументу?

Я использую PDFXCview.exe в Ubuntu 16.04 под вином-3.1.

Когда я указываю файл 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, где путь, распознаваемый вирусом: $ 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 не распознает абсолютный путь к его аргументу, а только относительный путь? [ ! d11]

Мне было интересно, связана ли вышеупомянутая проблема с PDFXCview.exe из-за самой программы или вина? У меня нет Windows для тестирования, а также интересно, работает ли PDFXCview.exe в Windows так же, как в Wine.

Спасибо.

Снимок экрана тега диска winecfg

PDFXCview.exe

0
задан 22 March 2018 в 17:43

3 ответа

Вы предоставляете абсолютный путь в стиле Linux к исполняемому файлу Windows, который выполняется Wine, не давая этому аргументу пути самому Wine. Таким образом, вы должны рассматривать каждый аргумент после пути к .exe как аргумент стиля Windows (т. Е. [F2]).

Полные пути стиля Linux работают для notepad.exe, но считают, что notepad.exe скорее всего не версия Linux-style версии Notepad, она включена в настройку Wine и, вероятно, изменена, чтобы принимать пути Linux (например, /tmp/test/O.pdf).

Однако большинство приложений, которые могут выполнять wine, не имеют этих настроек, и поэтому допускают только пути в стиле Windows. Таким образом, вы должны предоставить этим приложениям путь в стиле Windows в формате, например C:\Windows\System32\..., но в отношении фактического расположения файлов и относительно сопоставлений дисков в Wine, принимая во внимание консоль Bash / Linux интерпретация стилей * путей.

Сначала найдите сопоставления дисков и где они «существуют» в инфраструктуре файлов Linux. Для этого загрузите winecfg, а в окне конфигурации Wine перейдите на вкладку «Диски». Это будет выглядеть так:

Как вы можете видеть, у меня есть C:, который сопоставляется с каталогом Wine drive_c, который в этом случае находится в /home/teward/.wine. У меня также есть диск M:, сопоставленный с моим /mnt/ каталогом, что имеет значение, потому что у меня есть вещи, на которые ссылается M:\ в винных приложениях.

Что Сначала найдите сопоставления дисков и где они «существуют» в инфраструктуре файлов Linux. - это сопоставление Z:, которое отображается в корневом разделе / в моей среде Linux. Этот не является отображением по умолчанию, но не обязательно будет в вашей среде (так что убедитесь, что это так). Какой бы винный диск не сопоставлялся с /, вам нужно будет использовать. И если этого не существует, вам нужно добавить сопоставление дисков, которое соответствует либо /, либо фактическому каталогу, который ваши данные фактически находятся в том, что вы открываете с помощью приложения Windows. Технически вы могли бы отобразить T: на /tmp/, а затем сделать T:\0.pdf, но я не предполагаю, что для моего ответа.

Итак, для целей этого ответа я предположим, что Z: фактически отображается на / и использует это с этого момента в моем ответе.

Вам нужно взять путь Linux и преобразовать его в стиль Windows с помощью Z:\ корень привода. Итак, для /tmp/test/0.pdf в Linux вы действительно дадите 'Z:\tmp\test\0.pdf' (включая одиночные кавычки ', чтобы оболочка не испортила интерпретацию * пути). Таким образом, приложение в стиле Windows получает путь, который он может читать и понимать, а не путь, которым он не может.

Очень немногие приложения Wine действительно способны понимать пути стиля /foo/bar/baz Linux, и большинство из тех, которые делают, были настроены и установлены как часть настройки Wine для начала. Поэтому лучше всего использовать пути в стиле Windows для приложений Windows, работающих внутри Wine, а не в стиле Linux.

* Когда я ссылаюсь на «интерпретацию», я не обратитесь к :, но \, который находится на путях. И хотя ваш путь не содержит пробелов, я также ссылаюсь на пробелы. В синтаксисе Bash \ используется как часть escape-символа. Кроме того, в командной строке аргументы разделяются пробелами, поэтому он не знает, как обрабатывать пробелы в путях, и как таковые вам придется избегать их с помощью обратных косых черт. Поэтому для того, что было бы C:\Program Files\Foo\bar.exe, на самом деле вам нужно будет поместить C:\\Program\ Files\\Foo\\bar.exe в путь. Тем не менее, с помощью оболочки Bash по умолчанию вы можете свести на нет эту неверную интерпретацию косых черт и пробелов, обернув путь одинарными кавычками ('), который рассматривает его как передаваемый буквальный аргумент в целом, поэтому вы можете сделать 'C:\Program Files\Foo\bar.exe' без необходимости преодолевать обратную косую черту или пробелы.

1
ответ дан 8 June 2018 в 15:22
  • 1
    Благодарю. Поэтому в обсуждении мы использовали чистые пути Linux и чистые пути Windows. В некоторых случаях полезен лидиционный путь на основе вин? см. askubuntu.com/q/1018400/1471 – Tim 23 March 2018 в 04:11
  • 2
    @Тим я ответил, но я не думаю, что это ответ, который вы действительно ищете напрямую... – Thomas Ward♦ 23 March 2018 в 04:37

Вы предоставляете абсолютный путь в стиле Linux к исполняемому файлу Windows, который выполняется Wine, не давая этому аргументу пути самому Wine. Таким образом, вы должны рассматривать каждый аргумент после пути к .exe как аргумент стиля Windows (т. Е. [F2]).

Полные пути стиля Linux работают для notepad.exe, но считают, что notepad.exe скорее всего не версия Linux-style версии Notepad, она включена в настройку Wine и, вероятно, изменена, чтобы принимать пути Linux (например, /tmp/test/O.pdf).

Однако большинство приложений, которые могут выполнять wine, не имеют этих настроек, и поэтому допускают только пути в стиле Windows. Таким образом, вы должны предоставить этим приложениям путь в стиле Windows в формате, например C:\Windows\System32\..., но в отношении фактического расположения файлов и относительно сопоставлений дисков в Wine, принимая во внимание консоль Bash / Linux интерпретация стилей * путей.

Сначала найдите сопоставления дисков и где они «существуют» в инфраструктуре файлов Linux. Для этого загрузите winecfg, а в окне конфигурации Wine перейдите на вкладку «Диски». Это будет выглядеть так:

Как вы можете видеть, у меня есть C:, который сопоставляется с каталогом Wine drive_c, который в этом случае находится в /home/teward/.wine. У меня также есть диск M:, сопоставленный с моим /mnt/ каталогом, что имеет значение, потому что у меня есть вещи, на которые ссылается M:\ в винных приложениях.

Что Сначала найдите сопоставления дисков и где они «существуют» в инфраструктуре файлов Linux. - это сопоставление Z:, которое отображается в корневом разделе / в моей среде Linux. Этот не является отображением по умолчанию, но не обязательно будет в вашей среде (так что убедитесь, что это так). Какой бы винный диск не сопоставлялся с /, вам нужно будет использовать. И если этого не существует, вам нужно добавить сопоставление дисков, которое соответствует либо /, либо фактическому каталогу, который ваши данные фактически находятся в том, что вы открываете с помощью приложения Windows. Технически вы могли бы отобразить T: на /tmp/, а затем сделать T:\0.pdf, но я не предполагаю, что для моего ответа.

Итак, для целей этого ответа я предположим, что Z: фактически отображается на / и использует это с этого момента в моем ответе.

Вам нужно взять путь Linux и преобразовать его в стиль Windows с помощью Z:\ корень привода. Итак, для /tmp/test/0.pdf в Linux вы действительно дадите 'Z:\tmp\test\0.pdf' (включая одиночные кавычки ', чтобы оболочка не испортила интерпретацию * пути). Таким образом, приложение в стиле Windows получает путь, который он может читать и понимать, а не путь, которым он не может.

Очень немногие приложения Wine действительно способны понимать пути стиля /foo/bar/baz Linux, и большинство из тех, которые делают, были настроены и установлены как часть настройки Wine для начала. Поэтому лучше всего использовать пути в стиле Windows для приложений Windows, работающих внутри Wine, а не в стиле Linux.

* Когда я ссылаюсь на «интерпретацию», я не обратитесь к :, но \, который находится на путях. И хотя ваш путь не содержит пробелов, я также ссылаюсь на пробелы. В синтаксисе Bash \ используется как часть escape-символа. Кроме того, в командной строке аргументы разделяются пробелами, поэтому он не знает, как обрабатывать пробелы в путях, и как таковые вам придется избегать их с помощью обратных косых черт. Поэтому для того, что было бы C:\Program Files\Foo\bar.exe, на самом деле вам нужно будет поместить C:\\Program\ Files\\Foo\\bar.exe в путь. Тем не менее, с помощью оболочки Bash по умолчанию вы можете свести на нет эту неверную интерпретацию косых черт и пробелов, обернув путь одинарными кавычками ('), который рассматривает его как передаваемый буквальный аргумент в целом, поэтому вы можете сделать 'C:\Program Files\Foo\bar.exe' без необходимости преодолевать обратную косую черту или пробелы.

1
ответ дан 17 July 2018 в 18:22

Вы предоставляете абсолютный путь в стиле Linux к исполняемому файлу Windows, который выполняется Wine, не давая этому аргументу пути самому Wine. Таким образом, вы должны рассматривать каждый аргумент после пути к .exe как аргумент стиля Windows (т. Е. [F2]).

Полные пути стиля Linux работают для notepad.exe, но считают, что notepad.exe скорее всего не версия Linux-style версии Notepad, она включена в настройку Wine и, вероятно, изменена, чтобы принимать пути Linux (например, /tmp/test/O.pdf).

Однако большинство приложений, которые могут выполнять wine, не имеют этих настроек, и поэтому допускают только пути в стиле Windows. Таким образом, вы должны предоставить этим приложениям путь в стиле Windows в формате, например C:\Windows\System32\..., но в отношении фактического расположения файлов и относительно сопоставлений дисков в Wine, принимая во внимание консоль Bash / Linux интерпретация стилей * путей.

Сначала найдите сопоставления дисков и где они «существуют» в инфраструктуре файлов Linux. Для этого загрузите winecfg, а в окне конфигурации Wine перейдите на вкладку «Диски». Это будет выглядеть так:

Как вы можете видеть, у меня есть C:, который сопоставляется с каталогом Wine drive_c, который в этом случае находится в /home/teward/.wine. У меня также есть диск M:, сопоставленный с моим /mnt/ каталогом, что имеет значение, потому что у меня есть вещи, на которые ссылается M:\ в винных приложениях.

Что Сначала найдите сопоставления дисков и где они «существуют» в инфраструктуре файлов Linux. - это сопоставление Z:, которое отображается в корневом разделе / в моей среде Linux. Этот не является отображением по умолчанию, но не обязательно будет в вашей среде (так что убедитесь, что это так). Какой бы винный диск не сопоставлялся с /, вам нужно будет использовать. И если этого не существует, вам нужно добавить сопоставление дисков, которое соответствует либо /, либо фактическому каталогу, который ваши данные фактически находятся в том, что вы открываете с помощью приложения Windows. Технически вы могли бы отобразить T: на /tmp/, а затем сделать T:\0.pdf, но я не предполагаю, что для моего ответа.

Итак, для целей этого ответа я предположим, что Z: фактически отображается на / и использует это с этого момента в моем ответе.

Вам нужно взять путь Linux и преобразовать его в стиль Windows с помощью Z:\ корень привода. Итак, для /tmp/test/0.pdf в Linux вы действительно дадите 'Z:\tmp\test\0.pdf' (включая одиночные кавычки ', чтобы оболочка не испортила интерпретацию * пути). Таким образом, приложение в стиле Windows получает путь, который он может читать и понимать, а не путь, которым он не может.

Очень немногие приложения Wine действительно способны понимать пути стиля /foo/bar/baz Linux, и большинство из тех, которые делают, были настроены и установлены как часть настройки Wine для начала. Поэтому лучше всего использовать пути в стиле Windows для приложений Windows, работающих внутри Wine, а не в стиле Linux.

* Когда я ссылаюсь на «интерпретацию», я не обратитесь к :, но \, который находится на путях. И хотя ваш путь не содержит пробелов, я также ссылаюсь на пробелы. В синтаксисе Bash \ используется как часть escape-символа. Кроме того, в командной строке аргументы разделяются пробелами, поэтому он не знает, как обрабатывать пробелы в путях, и как таковые вам придется избегать их с помощью обратных косых черт. Поэтому для того, что было бы C:\Program Files\Foo\bar.exe, на самом деле вам нужно будет поместить C:\\Program\ Files\\Foo\\bar.exe в путь. Тем не менее, с помощью оболочки Bash по умолчанию вы можете свести на нет эту неверную интерпретацию косых черт и пробелов, обернув путь одинарными кавычками ('), который рассматривает его как передаваемый буквальный аргумент в целом, поэтому вы можете сделать 'C:\Program Files\Foo\bar.exe' без необходимости преодолевать обратную косую черту или пробелы.

1
ответ дан 23 July 2018 в 19:09

Другие вопросы по тегам:

Похожие вопросы: