Как сделать ярлык с относительным путем

Добавил пользователь Alex
Обновлено: 18.09.2024

чтобы создать ярлык с относительным путем, установите цель следующим образом.

это также просто сделать программу работать от имени администратора.

но два вместе не работают. Когда cmd.exe запускается как admin, он теряет текущий рабочий каталог и переходит в %windir%system32 . Здесь начинается относительный путь, который не предназначен.

есть ли способ сделать ярлык, что это и относительная и работать как администратор?

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

хотя ярлыки при создании указывают на определенные файлы или папки, они могут сломаться, если цель перемещена в другое место. Microsoft Windows имеет стандартные алгоритмы для исправления ярлыков, когда они перемещаются. Windows 9x - версии Windows используют простой алгоритм поиска для исправления сломанных ярлыков.[1] в операционных системах под управлением Windows NT и файловой системе NTFS уникальный идентификатор целевого объекта хранится в файле ярлыков, и Windows может использовать службу отслеживания распределенных ссылок для отслеживания целей ярлыков, так что ярлык может быть автоматически обновлен, если цель перемещается на другой жесткий диск водить.[4]

для переносимого ярлыка, который работает с относительным путем, используйте следующее:

просто поместите это в "цель" свойств ярлыка:

ожидаемое поведение: Краткое окно CMD появится и закроется непосредственно перед запуском chrome.

Примечание: параметр "Start in:" можно оставить пустым. Также обратите внимание ,что.exe находится в той же папке, что и ярлык, но переместите папку, и ярлык работает нормально.

Это подтверждено для работы в Win10 1607.

сначала изменяется относительный путь, затем запускается приложение. The && является разделителем команд.

кроме того, мне пришлось оставить "Start In" пустым.

Примечание: Я не получил эту работу полностью, мое приложение начнется, но сбой. Так что, возможно, я все еще что-то упускаю.

Чтобы создать ярлык с относительным путем, установите цель следующим образом.

Также легко сделать программу запустимой как администратор.

Но объединение двух вместе не сработает. Когда cmd.exe запускается как admin, он теряет текущий рабочий каталог и переходит в %windir%\system32 . Относительный путь начинается там, который не предназначен.

Есть ли способ сделать ярлык и относительный и запустить как admin?

ОТВЕТЫ

Ответ 1

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

Ответ 2

Для переносного ярлыка, который работает с относительным путем, используйте следующее:

Просто отбросьте это в "Цель" свойств ярлыка:

Ожидаемое поведение: Кратковременное окно CMD появится и закроется непосредственно перед запуском хрома.

Примечание. Параметр "Начать в:" можно оставить пустым. Также обратите внимание, что .exe находится в той же папке, что и ярлык, но переместите папку, и ярлык работает просто отлично.

Это подтверждено для работы в Win10 1607.

Ответ 3

Сначала это изменяется на относительный путь, затем запускается приложение. && - разделитель команд.

Кроме того, мне пришлось оставить "Start In" пустым.

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

У меня есть ярлык к файлу. Путь ярлыка "\папка\ярлык". Этот ярлык имеет определённую несистемную иконку в папке. Путь иконки "\папка\подпапка\иконка". Вопрос: как задать относительный путь к иконке, чтобы при перемещении "папка" в другое место иконка ярлыка сохранялась?

2 ответа 2

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

введите сюда описание изображения

На рисунке ниже показана добавленная переменная среды окружения под названием SHRTCT , имеющая значение C:\ShortCut :

введите сюда описание изображения

Далее указываем нашу новую переменную среды окружения в качестве относительного пути к иконке:

введите сюда описание изображения

Но после перемещения\удаления\что-либо еще нашей папки ShortCut , попытка смены значка окончится провалом:

Таким образом, относительный путь для иконки ярлыка штатными средствами Windows установить невозможно.

Все мы знаем, что такое ярлык. А что будет, если сделать ссылку ярлыка самого на себя?
Создание ярлыка на ярлык приводит к его копированию. И что будет, если принудительно создать побайтно такой ярлык?

Но, расскажу я не об этом, а о том, как можно создать папку, от вида которой все программы вылетают с ошибками.
Да, только от вида: на папку даже кликнуть не успеете.


Зайти в такую папку обычными файловыми менеджерами будет невозможно.

Но тут не обошлось без ярлыка, и я расскажу, как это сделать и для чего можно использовать.

Предыстория


Там были два файла: desktop.ini и target.lnk

Если переименовать или удалить один из файлов, то проводник начнет показывать настоящие внутренности.

В файле desktop.ini обнаружил следующий текст:

А ярлык ссылался на ту папку, которую я создал в начале.

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

И я понял, что мои файлы в такой папке никто не увидит, а получить доступ к своей папке я могу по прямому адресу внутри папки-ярлыка.
Но это не давало защиты персональным файлам: папку все равно могли удалить вместе с моими данными.

Я возился дальше с интересной папкой, пробовал заменять файл target.lnk на свой, и смотреть, что получится.
Можно менять иконку ярлыка, и иконка папки в этом случае тоже меняется.


И тут я создал ярлык на тот же файл desktop.ini, переименовал его на target.lnk

Такому эффекту я сразу не поверил, и не понял, в чем дело: после переименования проводник сразу же выдал ошибку и перезапустился.
Я полез обратно в созданную папку, и как только увидел ее, то проводник опять вылетел.

Я начал исследовать странный эффект и понял, что проводник пытался получить свойства папки-ярлыка, и они перенаправлялись на саму папку еще раз. В итоге получается зацикливание.
Пробовал заходить в папку разными программами: даже Total Commander вылетал при попытке зайти в нее, пускай даже с задержкой. Зайти в нее удавалось только с помощью консоли.

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

Последовательность действий

Для того, чтобы папка-убийца ярлык работала, как положено, должно быть следующее:
  • у папки должен быть атрибут System
  • в папке должен быть файл desktop.ini с правильным контентом
  • в папке должен быть ярлык target.lnk, который ссылается на файл desktop.ini в этой же папке
При создании такой папки, используя проводник, есть подводные камни
  • атрибут System для папки должен быть задан до создания внутренних файлов
  • надо сначала записать данные в desktop.ini и только после этого ставить его в папку
  • перед тем как положить ярлык target.lnk в папку, в нее надо перезайти
  1. создать пустую папку, желательно не на рабочем столе
  2. создать подпапку, положить туда ваши данные и запомнить путь
  3. задать первоначальной папке атрибут System
  4. создать текстовый файл desktop.txt и записать в него данные, как написано выше
  5. переименовать desktop.txt в desktop.ini
  6. создать ярлык на desktop.ini под названием target.lnk, и проводник перезапустится

Для автоматизации создания такой папки я написал скрипт:

Его надо сохранить в файл под названием mkFolderKiller.vbs, и папку перетаскивать на него.

Привязка пути к защищенной папке

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

Нам надо создать пустую папку в таком месте, в которое пользователь не сможет залезть.
Например, глубоко в файлах системы (если есть доступ).
Задаем ей атрибут System, и пишем туда файл desktop.ini, но не спешим делать ярлык.

Теперь, на другом диске, там, где должна быть папка с данными, делаем то же, например, на D:\.
Берем ярлык файла desktop.ini с диска С:\ и кладем в папку, что на диске D:\. Только после этого делаем ярлык в папке диска C:\.

Защита папки на флешке

Выводы

Каждый может создать себе эту папку, ради забавы, ради тестов или ради примитивной защиты.

Является ли это надежной защитой?

Лично я проводил все эксперименты в университете, на Windows XP и 2000.
И, со временем, на Windows Vista, 7 и Windows 8.
Вне зависимости от разрядности системы, оно работает на всех версиях.

Приносит ли вред эта папка компьютеру?

Конечно же, нет. Все, что она делает, это зацикливает процесс, который хочет получить к ней доступ, и это приводит к его перезапуску.

Как удалить такую папку-убийцу?

Можно зайти с помощью консоли в папку и переименовать один из двух файлов или убрать флаг System у папки.
Или переименовать коренную папку, чтобы нейтрализовать зацикливание.

Если не терпится попробовать

Можете скачать файл по ссылке ShortcutKiller.rar,
распаковать его в папку C:\TEMP\1234, и перезайти в нее.
В архиве есть папка 1 с двумя файлами desktop.ini и target.lnk, привязанными только к этому пути.

Надеюсь, статья была вам интересна, и что у меня получилось хорошо все объяснить.
Я находил еще много разных глюков, про которые нигде не написано, может, расскажу в другой раз :)

Читайте также: