Будет исполняемый файл, перемещенный в другой каталог все еще, работает?

Я хотел бы знать при перемещении исполняемого файла в каталог, отличающийся от того, где он установлен, заставит его не смочь работать? Я помнил, что это имеет место под Windows XP при выполнении исполняемого файла путем нажатия на его значок. Под терминалом Linux кажется, что с его путем, указанным правильно, исполняемый файл может все еще работать? Спасибо за разъяснение! Regards!

1
задан 01.09.2009, 15:57

5 ответов

Пока исполняемый файл может найти, что это - зависимости (другой dlls в Windows, например) затем, это будет работать. Если это не может ни по какой причине (т.е. это предполагает, что они находятся в том же каталоге), затем, это не будет.

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

4
ответ дан 12.12.2019, 08:04
  • 1
    В то время как исполняемый файл может работать в Windows, по крайней мере, так как информация об удалении записана в реестр, эти пути будут неправильными и пытаться удалить приложение, приведет к ошибке и Windows, просто удалив запись из списка. Это обычно - не хорошая идея переместить каталог. – Will Eddins 31.08.2009, 21:58
  • 2
    @Guard - положительная сторона. – ChrisF 31.08.2009, 23:15

Это зависит 100% от приложения.

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

Самая большая проблема находится в реестре. Если приложение записало, где оно было установлено на реестре, оно может искать определенные файлы в старом каталоге во времени выполнения.

Если Вы установили приложение, это также хранится в реестре, и удаляющий от Добавляют/Удаляют, что программы больше не будут работать.

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

2
ответ дан 12.12.2019, 08:04

обычно. Если существуют совместно использованные библиотеки, они, возможно, должны быть перемещены также, или набор пути, таким образом, он может найти их, в зависимости от Вашей операционной системы.

0
ответ дан 12.12.2019, 08:04
  • 1
    ячейки в зависимости от ОС, типа библиотек, типа приложения, и т.д.... существует много переменных – Max Schmeling 31.08.2009, 21:38
  • 2
    Для Linux совместно использованные библиотеки или не добавляли к глобальному/etc/ld.so.conf (и/etc/ld.so.cache затем обновлял путем выполнения ldconfig команда) или ими управляют путем установки LD_LIBRARY_PATH или других параметров среды LD_*. Обычно Вы пишете две или три обертки строки, чтобы установить значение LD_* и затем выполнить Вашу цель. Вы не должны только помещать настройки LD_* в свою общую среду оболочки! Подобные соображения относятся к любому GNU libc система, конечно, и некоторые из них относятся к другой версии UNIX. – Jim Dennis 01.09.2009, 04:57

Нет никакой технической причины, что Вы не можете переместить исполняемый файл ни в какой каталог, Вы хотите и выполнить его. Сам исполняемый файл не должен знать или заботиться о том, в чем его имя файла или что каталог его. Однако исполняемый файл должен смочь найти любые другие файлы, которые он хочет для открытия, такие как конфигурационные файлы, файлы данных, общие библиотеки, и т.д. Часто времена, которые исполняемый файл будет записан таким образом, что он ожидает находить эти вещи в том же каталоге, он выполняется от или в подкаталоге, например, exeuctable, могли бы ожидать это, если он выполняется в:

/foo/baz/bin/executable

То, что его файлы конфигурации находятся в

/foo/baz/etc/configfile

Пока Вы удостоверяетесь, что исполняемый файл может найти любые другие файлы, которые он должен открыть, необходимо смочь переместить его по мере необходимости. В соответствии с Linux, команда 'strace' может быть полезна для этого, можно выполнить exe под strace и видеть, какие файлы его попытка открыться и их захватывает их и перемещает их. Кроме того, для общих библиотек 'ldd' полезно, поскольку это говорит Вам, какие общие библиотеки исполняемый файл попытается открыть и которые это не находит.

0
ответ дан 12.12.2019, 08:04
  • 1
    Спасибо! В Вашем примере, если я перемещаю/foo/baz в целом, который будет в порядке? Интересно, почему такое перемещение целого каталога пакета часто жизнеспособно в Linux. Если зависевшие файлы находятся в "том же каталоге, он выполняется от или в подкаталоге" того же пакета, они всегда указываются в исполняемом файле как относительный путь? Если зависевшие файлы находятся в некотором общем каталоге как/usr/local,/usr и т.д., они всегда указываются в полном пути? – Tim 31.08.2009, 22:16
  • 2
    Да, в этом примере, перемещающемся/foo/baz в целом, будет работать. Ваш оператор о родственнике по сравнению с полными путями часто верен, но я держал пари, выглядели ли мы достаточно твердыми, мы могли бы найти некоторую программу где-нибудь, которая сделала что-то абсолютно странное. Часто, единственный способ быть бесспорным состоит в том, чтобы сделать перемещение и затем использующий ldd, strace, поврежденное поведение, проверить, что все работает правильно. – bdk 31.08.2009, 22:45

В соответствии с Linux (и UNIX в целом) большинство исполняемых файлов может быть перемещено свободно. Они обычно находят свои зависимости, автоматически... иногда использующие ~/.* ("отмечают точкой файлы")... традиционно названные вещи как ~/.rc (где 'дистанционное управление' первоначально обозначало "команду выполнения", но может считаться настройками "ресурса/конфигурации"). Иногда (все больше) пакеты UNIX/Linux будут создавать ~/. каталог (такой как ~/.gnome/, ~/.firefox/и так далее).

Обычно приложение будет проверять на ~/.* файл, затем ищите/etc/конфигурационный файл. Это может искать в других местах (таких как/opt/etc/или/usr/local/etc).

Таким программам также довольно свойственно соблюдать параметр среды... так Вы export (Оболочки семейства границы) или setenv (csh/tcsh) соответствующая установка установки для тех. Конечно, им также свойственно взять переключатель командной строки для указания на любые конфигурационные файлы или ресурсы.

Обычно лучше обращаться к документации программы для обнаружения о файлах и параметрах среды. Обычно программа будет позволять переключателю командной строки переопределять любой параметр среды, переопределяя любой ~/.* установка, которая переопределяет любой / и т.д. /* установка, которая могла бы переопределить любого скомпилированного в установке. Однако это - просто свободно сопровождаемая конвенция. Проверьте документы!

В общем UNIX/Linux программы намного менее хрупки, чем MS Windows или более старые программы MacOS в управлении их местоположениями ресурса. Обычно нет никакого непрозрачного "реестра" или "ветвей ресурсов" для сокрытия этих вещей от Вас.

0
ответ дан 12.12.2019, 08:04

Теги

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