Как создать lnk файл

Обновлено: 04.07.2024

У меня есть исполняемый файл на моем диске на ключ в каталоге dir \ program \ prog.exe Я хотел бы иметь ярлык для исполняемого файла в корневом каталоге DoK, то есть prog.lnk будет ссылаться на dir \ program \ prog.exe.

Однако, похоже, что prog.lnk не может иметь относительную цель. Это проблема, когда у DoK будут назначены разные буквы дисков, в зависимости от того, к какому ПК подключен.

Любые предложения, помимо очевидного размещения prog.exe в корневом каталоге?

(в конечном счете, я хотел бы сделать это во время установки с помощью nsis)

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

/ d устанавливает каталог в каталог .lnk-файла

Могут быть другие полезные параметры для команды запуска (например,/b)

Хотя ярлыки могут содержать относительный путь к цели (файлы .lnk имеют флаг SLDF_HAS_RELPATH ) NSIS не поддерживает создание чего-либо другого, кроме« нормальных »ярлыков, поэтому вам нужно напрямую записывать двоичные данные (формат .lnk довольно стабилен и был документирован MS)

Назовите это так:

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

Гораздо лучшее решение - создать небольшое приложение NSIS, такое как Олег предлагает (приложения NSIS могут содержать встроенные данные в конце .exe, которые он может читать от себя во время выполнения и т. Д.)


I'm using a bit of a hack. The approach is shown in this screenshot:

Он запускает explorer.exe и затем проходит путь relative следующим образом:

Для этого я использую небольшой инструмент под названием «Относительный» . После его установки вы можете щелкнуть правой кнопкой мыши файл, а затем выбрать Создать относительный ярлык . . Затем откроется окно Сохранить как . . Это не так удобно, как просто перетаскивание, но это помогает. (Он также использует свой собственный специальный значок для создаваемых ссылок. Таким образом, у вас больше нет исходного значка в ссылке. См. Выше. Возможно, вам может или не нравится это.)

Ты прав. Вы не можете использовать ярлыки (.lnk) на съемном носителе, потому что, как вы сами написали, съемный носитель может иметь разные буквы дисков в разных ситуациях.

Если вам нужно что-то в корневом каталоге диска, используйте вместо него ярлык CMD, VBS или JS. В какой-то ситуации используется также стандартный EXE, который использует файл конфигурации, такой как INI-файл, для запуска другой программы из другого подкаталога. Это типичная практика для CD/DVD для запуска запуска программы установки после вставки диска. Наверное, этот способ будет в порядке и для ваших требований?

Я считаю, что команда NT 4 Resource Kit SHORTCUT.exe создаст относительные связанные ссылки. Я хочу, чтобы Microsoft создала новую поддерживаемую утилиту или командлет Powershell, чтобы облегчить создание относительных файлов .lnk или сделать ссылки NTFS более похожими на символические ссылки Linux. До тех пор я использую файлы .cmd/.bat и .ps1 для этой цели.

  • @ = Подавляет эхо команды.
  • %

К сожалению, хотя .cmd/.bat файлы будут запускаться из любого контекста (диалог запуска, приглашение CMD, в Powershell, двойной щелчок в Проводнике и т. Д.), Они не могут вызывать вещи, хранящиеся на пути UNC. Для разоблачения вещей в UNC-пути, в Powershell (я делаю это для таких инструментов, как Git и Mercurial), я создам версию Powershell вышеприведенного скрипта.

У меня есть исполняемый файл на моем диске в ключе в каталоге dir \ program \ prog.exe Я хотел бы иметь ярлык для исполняемого файла в корневом каталоге DoK, то есть prog.lnk будет ссылаться на dir \ program \ prog.exe.

Однако, похоже, что у prog.lnk не может быть относительной цели. Это проблема, когда DoK назначают разные буквы дисков в зависимости от того, к какому компьютеру он подключен.

Есть ли какие-либо предложения, кроме очевидного - поместить prog.exe в корневой каталог?

(в конечном счете, я хотел бы сделать это во время установки, используя nsis)

Хотя ярлыки могут содержать относительный путь к цели (файлы .lnk имеют флаг SLDF_HAS_RELPATH ) NSIS не поддерживает создание чего-либо, кроме «обычных» ярлыков, поэтому вам нужно записывать двоичные данные напрямую (формат .lnk довольно стабилен и был задокументирован MS)

Назовите это так:

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

Гораздо лучшим решением является создание небольшого приложения NSIS, как предлагает Олег (приложения NSIS могут содержать встроенные данные в конце .exe, которые они могут читать из себя во время выполнения и т. д.)

Если мы предположим, что cmd.exe будет находиться на одном и том же абсолютном пути для всех установок Windows (вероятно, но не защищено от ошибок), вы можете создать файл .lnk для запуска cmd следующим образом

/d устанавливает каталог в каталог файла .lnk

Могут быть и другие полезные опции для команды запуска (например, /b)


Я использую немного хака. Подход показан на этом снимке экрана:

Он запускает explorer.exe, а затем передает относительный путь следующим образом:

Для этого я использую небольшой инструмент под названием «Относительный» . После установки вы можете щелкнуть правой кнопкой мыши файл и затем выбрать Create relative shortcut. . Затем появится окно Save as. . Это не так удобно, как простое перетаскивание, но это помогает. (Он также использует свой собственный специальный значок для создаваемых ссылок. Таким образом, у вас больше нет оригинального значка в ссылке. См. Выше. Вам это может понравиться или не понравиться.)

Вы правы. Вы не можете использовать ярлыки (.lnk) на съемном носителе, потому что, как и вы сами, на съемном носителе могут быть разные буквы дисков в разных ситуациях.

Если вам нужно что-то в корневом каталоге диска, используйте вместо ярлыка CMD, VBS или JS. В некоторых ситуациях можно использовать также стандартный EXE-файл, который использует конфигурационный файл, такой как INI-файл, для запуска другой программы из другого подкаталога. Для CD /DVD это обычная практика: запуск программы установки после установки диска. Вероятно, этот путь тоже подойдет для ваших требований?

Я считаю, что команда NT 4 Resource Kit SHORTCUT.exe создаст относительные связанные ярлыки. Мне бы хотелось, чтобы Microsoft создала новую поддерживаемую утилиту или командлет Powershell, чтобы облегчить создание относительных файлов .lnk или сделать ссылки NTFS более похожими на символические ссылки Linux. До этого я использую файлы .cmd /.bat и .ps1 для этой цели.

Program.cmd

  • @ = Подавляет эхо команды.
  • %

Program.ps1

К сожалению, хотя файлы .cmd /.bat будут запускаться из любого контекста (диалоговое окно запуска, приглашение CMD, в Powershell, двойной щелчок в проводнике и т. д.), они не могут вызывать вещи, хранящиеся по пути UNC. Для демонстрации вещей в пути UNC в Powershell (я делаю это для таких инструментов, как Git и Mercurial), я создам версию приведенного выше сценария Powershell.

У меня есть исполняемый файл на моем диске на ключ в каталоге \program\prog.exe
Я хотел бы иметь ярлык для исполняемого файла в корневом каталоге DoK, то есть prog.lnk будет ссылаться на dir\program\prog.exe.

Однако, похоже, что prog.lnk не может иметь относительную цель. Это проблема, когда DoK будет иметь разные буквы дисков, назначенные ему, в зависимости от того, к какому ПК он подключен.

Любые предложения, помимо очевидного размещения prog.exe в корневом каталоге?

(в конечном счете, я хотел бы сделать это во время установки с помощью nsis)

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

/d устанавливает каталог в каталог .lnk файла

Могут быть другие полезные параметры для команды запуска (например,/b)

Хотя ярлыки могут содержать относительный путь к цели (файлы .lnk имеют флаг SLDF_HAS_RELPATH) NSIS не поддерживает создавая ничего, кроме "нормальных" ярлыков, поэтому вам нужно напрямую записывать двоичные данные (формат .lnk довольно стабилен и документирован MS)

Назовите его следующим образом:

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

Лучшим решением является создание небольшого приложения NSIS, такого как Олег (приложения NSIS могут содержать встроенные данные в конце .exe, которые он может читать от себя во время выполнения и т.д.).


Я использую немного взлома. Этот снимок показан на этом скриншоте:

Он запускает explorer.exe и затем передает относительный путь следующим образом:

Я использую для этого небольшой инструмент маленький инструмент под названием "Относительный" . После его установки вы можете щелкнуть правой кнопкой мыши файл и выбрать Create relative shortcut. . Затем появится окно Save as. . Это не так удобно, как просто перетаскивание, но это помогает. (Он также использует свой собственный специальный значок для создаваемых ссылок. Таким образом, у вас больше нет исходного значка в ссылке. См. Выше. Возможно, вам может или не понравится.)

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