Execute windows exe on linux

Запуск EXE-файлов в Linux

Шаг 1: Установка Wine

Запуск EXE-файлов в Linux — задача несложная, однако небольшие трудности заключаются в поиске инструментов, позволяющих справиться с этим. Популярной программой является Wine, и ее аналогов почти нет, а существующие неизвестны практически никому. Поэтому в сегодняшней статье мы поговорим именно об этом решении. Начать стоит с его добавления в дистрибутив, поскольку по умолчанию Wine отсутствует в любой сборке ОС, основанной на Linux.

Способ 1: Менеджер приложений

Существует несколько доступных вариантов инсталляции Wine. Первый подразумевает использование менеджера приложений, который встроен в популярные дистрибутивы, основанные на Debian или RedHat. В первую очередь рассмотрим именно этот вариант, а осуществляется поставленная цель так:

  1. Откройте основное меню, кликнув по соответствующей кнопке, и запустите оттуда «Менеджер приложений».
  2. Отыщите кнопку поиска, чтобы открыть строку для ввода названия программы.
  3. Напишите Wine и опуститесь вниз по списку, чтобы найти подходящий вариант.

Сейчас давайте приступим к рассмотрению альтернативного варианта инсталляции, если этот вам не подходит, а о предварительной настройке установленного инструмента поговорим в отдельном шаге данного материала.

Способ 2: Официальные репозитории

Как известно, программы в «Менеджере приложений» находятся в официальных репозиториях, а принцип их установки основан на терминальных командах. Именно их и следует задействовать в тех случаях, когда нет возможности открыть решение с GUI или оно попросту отсутствует в используемом дистрибутиве. Не переживайте, управление консолью не является чем-то сложным, в чем и удостоверимся далее.

    Запустите «Терминал» удобным для вас образом, например, через меню приложений или горячую клавишу Ctrl + Alt + T.

На этом инсталляция завершена. Имеются еще и другие альтернативные методы добавления Wine в операционную систему, но их детальный разбор сейчас не имеет смысла, поэтому перемещаемся к следующему этапу.

Шаг 2: Первый запуск и настройка Wine

К счастью, большинство параметров рассматриваемой программы уже настроены автоматически, а недостающие компоненты так же самостоятельно загружаются. Однако юзеру все-таки придется выполнить несколько действий перед переходом к запуску EXE-файлов.

  1. Запустите софт, например, через «Менеджер приложений» или введя его название в консоли.
  2. Дождитесь завершения обновления конфигурации. Во время этого на экране будут появляться сообщения о надобности инсталляции дополнительных компонентов, включая .NET Framework и Gecko.
  3. После этого отобразится графическое меню с пользовательской конфигурацией. Здесь присутствуют детальные описания каждого пункта на русском языке, поэтому мы предлагаем разобраться с этим самостоятельно. Связано это и с тем, что все параметры устанавливаются по желанию пользователей.

На этом процедура конфигурации успешно завершена, а значит, можно переходить к непосредственному запуску имеющихся EXE-файлов.

Шаг 3: Запуск EXE-файлов через Wine

Перед началом выполнения поставленной задачи хотим отметить, что не стоит рассматривать Wine как полноценное средство работы с программами для Windows. Конечно, он является эмулятором, но потребление системных ресурсов при запуске софта поднимается в несколько раз, а также могут отсутствовать какие-либо опции, изначально работающие в Windows. Далее мы расскажем о более подходящих решениях для использования ПО в Linux, а сейчас давайте все-таки разберемся с выполнением EXE-объектов.

  1. Откройте файловый менеджер и переместитесь к расположению необходимого файла.
  2. Щелкните по нему правой кнопкой мыши и в контекстном меню выберите пункт «Открыть в другом приложении».
  3. Появится отдельное окно «Выбрать приложение». Здесь вас интересует пункт «Wine — загрузчик Windows программ».
  4. Если это уже полноценный софт, он откроется в новом окне и им можно управлять. В случае взаимодействия с инсталлятором начните стандартную операцию установки.
  5. Дождитесь окончания этой операции. Она может занять много времени, поскольку процессор в большинстве ситуаций нагружается на максимум.
  6. После этого вы можете запустить программу через значок на рабочем столе, графический интерфейс Wine или меню приложений.

Как уже было сказано ранее, запуск EXE-файлов — не лучший способ взаимодействовать с программами в Linux. Сейчас многие разработчики создают версии, корректно функционирующие в разных дистрибутивах, однако часто их нет в официальных репозиториях, то есть скачать из менеджеров приложений такой софт не получится. Приходится скачивать отдельные DEB или RPM-пакеты либо же вообще вручную распаковывать архивы. Не потрудитесь отыскать сборку требуемого софта для вашего дистрибутива, а затем установите ее, используя инструкции из приведенной далее статьи.

Читайте также:  Bash работа с ssh

Это было все, что мы хотели рассказать о запуске ПО для Windows в Linux. Как видно, лучшее решение всего одно, поэтому его и задействуют абсолютно все пользователи, желающие реализовать данную цель. Остается только следовать инструкциям, чтобы без каких-либо проблем открыть EXE-элемент и начать взаимодействие с ним.

Источник

How to run an .exe from linux command prompt

I am new to Linux. I am currently trying to write a command line which should execute a *.exe inside a folder abc.

But the error says no such file or directory .

9 Answers 9

but if it’s really a Windows program, you will need to install «wine», then do:

but only some Windows programs will work under wine.

This anwswer is combining other answers in to this question into one.

The info.exe file will either execute under Linux or Windows, but not both.

Executes Under Windows

If the file is a windows file, it will not run under Linux on it’s own. So if that’s the case, you could try running it under a windows emulator (WINE). If it’s not compatible with wine, then you won’t be able to execute it under Linux.

Before you can start, you will need to install wine. The steps you need to install wine will vary on the linux platform you are on. You can probably google «Ubuntu install wine», if for example, you’re installing ubuntu.

Once you have wine installed, then you’d be able to execute these commands.

Execute Under Linux

if you know this file to run under linux, then you’ll want to execute these commands:

Change to your abc directory

Then you’ll want to change permissions to allow all users to execute this file (a+x).
you could also allow just the user to execute (u+x)

Launch the program, the ./ tells the command line to look in the current path for the file to execute (if the ‘current’ directory isn’t in the $PATH environment variable.

you can’t 🙂 exe is Microsoft only. now if you had a linux executable you could do:

On Linux you give the file executable permissions. It isn’t the extension that determines whether or not it can be executed (as on windows.)

Assuming you have a valid file that can be executed in Linux, (not a windows/dos file) do this:

Note that you need the leading ./ for the shell to find the file in the current directory!

This really belongs on superuser though.

I recently wanted to run some old MSDOS .exe files and I could just use dosbox. On Ubuntu it was just

apt-get install dosbox

.exes are generally Windows executables, not linux ones. To run those, use something like WINE.

Otherwise, to run a Linux executable, there are many ways, e.g.:

  1. cd abc; ./info.exe
  2. ./abc/info.exe
  3. /full/path/to/abc/info.exe
  4. Add «abc» to your PATH, then just run it as a normal command.

Wine is a program that you can install, which allows you to run .exe files on linux.

apt-get install wine

(go to the directory of your file: /cd (ex: Desktop/) And to open your .exe file:

If you have any problems with wine, you can do wine —help .

Here is how to run an executable file in Linux:

  1. open terminal with ctrl + alt + T : sudo apt-get update
  2. install Wine: sudo apt-get install wine
  3. go to the directory in which your .exe file is placed by changing directory: cd /Desktop
  4. wine filename.exe
Читайте также:  Sqlite update all values

Hit enter and your .exe file will be executed.

Executing a Linux executable on Linux

If the executable is a Linux executable, you need to make sure that your shell can find it. Here are some ways how to do that.

But first, make sure it’s executable. You can check whether the x (executable) flag is set using ls -l abc/info.exe and you can set it with chmod +x abc/info.exe .

  • Run it with relative path, in your example: abc/info.exe .
  • Run it with absolute path, for example: /home/username/abc/info.exe (depends on where it actually is)
  • Place the binary in a directory that is part of the PATH that is searched by the shell to find binaries. For example, cp abc/info.exe

/bin is part of PATH , you can now run info.exe without qualifying it.
Make the directory that contains the binary part of the PATH , for example, export PATH=

/abc:$PATH . Note that this is for the current shell only, unless you add this line to your .bashrc or .profile

Источник

Can I run a Windows .exe file on Linux? [duplicate]

Can a Windows .exe file be run on Linux?

If the same architecture is used will it be possible? Like if both programs run on X86 architecture, will it be possible to run a Windows .exe on Linux?

7 Answers 7

The exe file will either execute under Linux or Windows, but not both.

Executes Under Windows

If the file is a windows file, it will not run under Linux on it’s own. So if that’s the case, you could try running it under a Windows compatibility layer (Wine). If it’s not compatible with wine, then you won’t be able to execute it under Linux.

Before you can start, you will need to install Wine. The steps you need to install Wine will vary with the Linux platform you are on. You can probably Google «Ubuntu install wine», if for example, you’re installing Ubuntu.

Once you have wine installed, then you’d be able to execute these commands.

Execute Under Linux

If you know this file to run under linux, then you’ll want to execute these commands:

You’ll want to change permissions to allow all users to execute this file (a+x). you could also allow just the user to execute (u+x)

Launch the program, the ./ tells the command line to look in the current path for the file to execute (if the ‘current’ directory isn’t in the $PATH environment variable.

The operating system (Windows or Linux) provides services to applications. For example, Windows and Linux will have functions that the application can call to access files, to access the network, to display things on the screen, etc.

The different operating systems provide different ways of doing those things, so an application that does it the Windows way won’t work on Linux, and vice versa, even though the CPU architecture is the same.

No, different Operating Systems use different formats (ie. Windows uses PE while linux uses ELF). Also, when compiled, your program makes calls to native OS methods. As mentioned, you can look into using WINE. It provides most functionality to run Windows binries on Linux.

There are three major reasons why .exe files won’t directly run on Linux and why a Linux executable won’t directly run on Windows.

The first is System calls. System calls are, almost by definition, platform specific. However, not all system calls are made the same. There are portable system calls (e.g. defined by the C/C++ standard library) and non-portable system calls (e.g. defined by POSIX or Microsoft). Applications that are statically linked at compile time with the system libraries would find that the part of the code that is statically included would probably have no chance of executing correctly in the target platform due to the vastly different design of the platform. Applications that are dynamically linked at runtime do have a chance of running with a few condition: if it’s portable system calls, there is a translation table between the original binaries’ system calls to the target platform’s system calls; if it’s non-portable system call, there must be a compatibility layer that receive system calls of the original platform and find an equivalent translation in the target platform (which may not always be possible 1 , different platforms have different set of features, and some feature does not make sense in the other platform 2 ).

Solution: For running Windows program in Linux, Wine provides an implementation of Windows System Calls and Windows System Libraries, it also recognizes PE format; Wine can run Windows program in Linux without recompiling. For the Linux program in Windows, Cygwin provides an implementation of POSIX System calls in Windows, and it allows program written for Linux to be recompiled using Cygwin GCC to run on Windows system with no source-code changes. Because of the open source nature of most Linux program, it is easier to recompile rather than going the Wine’s way of providing binary-compatible layer. It is not impossible to provide wine-like compatibility layer, however Cygwin’s way is more robust and there is just not much drive to allow non-open-source Linux program to be easily ported to Windows.

The other is Executable Format. Windows uses PE (Portable Executable) format and Linux uses ELF (Executable and Linkable Format). The executable format contains metadata, and defines how the executable is to be loaded and executed by the platform.

Solution: It is entirely possible to write a PE -> ELF or ELF -> PE converter; and it probably should not be too hard to do so (warning: I’m not familiar with the actual format of either one). Another way is to write an executable loader that can understand PE files (e.g. Wine provides one) or executable loader that can understand ELF file (I believe the design of Windows limits the possibility of a double-clickable file running natively as an executable)

System calls calling convention. Linux and Windows does not only have a different set of available system calls, it also have a very different system call calling convention. In Linux, to make a system call you pass the syscall number in eax/rax register and arguments in the rest of registers, and then you make 0x80 interrupt request. In DOS, you also pass arguments in the register, however there is a different interrupt request number for each system service so you don’t pass system call number in eax/rax. Windows NT is more similar to Linux, however instead of 0x80 you raise 0x2E interrupt request, however the system call number still differs (so you need a syscall number translation table and possibly a compatibility layer).

Solution: Even when you don’t have a self-modifying code or trying to execute data as code or do other tricky codes, it is still very hard (as hard as solving the Halting Problem) to analyze an executable, search for all system calls interrupt requests, and translate them to the target platform’s system calls. An easier way is to provide a runtime service that handle the program’s interrupts requests and redirect them to the target platform’s system calls 3 .

There are various other reasons, but I believe these three are the big stumbling blocks.

1 filesystem security comes to mind, there is no way to translate between Linux’s security bits and Windows’ NTFS ACL.

2 Windows cannot fork a process; CreateProcess can somewhat be used to emulate fork however it loses the copy-on-write semantic. There is no way to do a create copy-on-write process in Windows.

Источник

Поделиться с друзьями
КомпСовет
Adblock
detector