Ярлыки в Windows используют абсолютные пути. То есть вроде бы, как-то, вооружившись идеальным английским и накачанным виагрой напильником для реестра, можно заставить их понимать пути относительные. По слухам. Но реальность такова, что использовать ярлыки на флешке, или в какой-то структуре папок, которая может менять свое местоположение, нельзя. Это понятно: если мы задали путь E:\папка, а на другом компьютере наш флеш-драйв поимел букву диска уже M, то путь неверен, и ничего тут не попишешь.Какие решения? Их, в общих чертах, два: использовать сторонние лончеры или командные файлы. Первое решение недостаточно гибко, да и не встречал я еще лончера, такого, чтобы ах, а второе... Не терплю мигающие окна, которые неизбежно порождает интерпретатор cmd.exe. Неаккуратненько как-то. Можно и этот риф обойти, но опять громоздить сторонние программы, опять в гамаке и стоя. Ах, да - есть еще vb и js скрипты. Да, это посимпатичней. Но все-таки.
Однако человеческий гений, как известно, не только гнет взглядом сталь, но, поднатужившись, может даже воздерживаться от алкоголя весь вечер. Решение состоит в вызове функции соответствующей библиотеки. Поскольку библиотеки (dll) сами по себе из командной строки не вызываются, следует использовать команду (имя программы, на самом деле) rundll32. То есть вы создаете обычный ярлык, в строке запуска (поле Объект в свойствах) которого пишете строку вида: %windir%\system32\RunDll32.exe shell32.dll,ShellExec_RunDLL ".\папка\файл". Обратите внимание на точку перед первым слешем. Обязательно оставьте поле Рабочая папка пустым, и путь будет читаться относительно положения самого ярлыка. Напоминаю, что для перехода в родительскую папку вместо одной точки в начале надо ставить две, "..\..\" - на два уровня вверх и так далее.
Есть вероятность, что могут возникнуть проблемы у пользователей с урезанными правами, не проверял. Сообщите, если да.
при открытие ярлыка не из файлового менеджера, а программно (из своего программного кода) метода не работает:(
Мм… То есть при попытке запустить созданный по такому рецепту ярлык? Не пробовал. Может проще будет обойтись без таких ярлыков, раз уж все равно программа пишется?
а как в чемаксе в Dragone Age прописать если там написыно Зaпycтитe игpy c пapaмeтpoм -enabledeveloperconsole.
Для этoгo, в яpлыкe к зaпycкy игpы дoбaвьтe eгo пocлe кaвычeк.
Пpимep, “C:\Games\Dragon Age\bin_ship\daorigins.exe” -enabledeveloperconsole
я это не пойму
На вид правильно. Еще бывает с двумя дефисами в начале — попробуйте.
Спасибо за совет. попробовал, получилось.
Но возникли проблемы когда попытался создать ярлык для запуска программы с параметрами:
.\Total_Commander_XP\TOTALCMD.EXE /I=”.\Profiles\Prof\main.ini” /F=”.\Profiles\Prof\ftp.ini”
Выдается сообщение об ошибке:
Windows не удалось найти ‘.\Total_Commander_XP\TOTALCMD.EXE /I=”.\Profiles\Prof\main.ini” /F=”.\Profiles\Prof\ftp.ini”‘. проверьте, что имя было введено правильно, и повторите попытку. Чтобы выполнить поиск файла, нажмите кнопку “пуск”, а затем выберите команду “Найти”.
подскажите, пожалуйста. Можно ли обойти это?
Можно попробовать указать два отдельных параметра, каждый в своих кавычках:
“запускаемая программа” “все ее параметры”. На простеньком примере у меня сработало. Ну и кавычки… Лучше бы их внутри параметра не было.
попробовал этот же ярлык, не получилось. попробовал и другой, где параметры без кавычек, тоже не прокатило. Жаль, идея то хорошая. Вы еще про скрипты упоминали. Не направите ли в нужную сторону?
Может эта зверюга пытается сама слеши как-то обработать?
Кстати, обнаружил, что если файл лежит в той же папке, что и ярлык, то писать надо без “.\”.
Насчет скриптов. В Windows встроен Windows Script Host (WSH) – движок, выполняющий скрипты (они же “сценарии”) на языках Visual Basic Script (vbs) и JScript (js, это майкрософтовский вариант javascript). по этим словам вы найдете достаточно информации, в том числе по русски.
Ну и старый добрый bat. Читать для начала здесь http://doitq.ru/2006/03/28/zhdu-ukazaniy-mon-zheneral/
п, насчет нелюбимых мною лишных окон: http://doitq.ru/2006/06/06/nevidimyiy-bat/
[...] В продолжение темы о ярлыках. Если в свойствах ярлыка, в поле «Объект» указать строку %windir%explorer.exe “.”, а поле «рабочая папка» оставить пустым, то его запуск будет открывать в проводнике ту папку, в которой этот ярлык лежит. Его можно копировать в разные папки, не изменяя. [...]
попробуйте положить в корень какой-нибудь папки ярлык на другую папку, обзовите его “target”, создайте там же файлик “Desktop.ini” с следующим содержимым:
[.ShellClassInfo]
CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}
Flags=2
и посмотрите в проводнике, что получится.
примечание: чтобы убрать эффект, воспользуйтесь каким-нибудь сторонним файловым менеджером, достаточно переименования ярлыка из “target” в любое другое имя.
К сожалению, сочетание этого и вышеописанного методов не дают желаемого эффекта.
Это аналог junction в NTFS?
Если не ошибаюсь, один из этих файлов (или оба) должен иметь атрибуты «скрытый» и «системный». Не писал о такой штуке, так как и раньше она глючила, а с каким-то из обновлений вообще перестала работать.
Спасибо – помогло, однако исчезает иконка и ярлык становится обычным. Можно как-то подправить?
В свойствах ярлыка есть кнопка «сменить значок». Там можно открыть как файл ico, так и файл приложения, содержащий иконки, и выбрать нужную. То есть для документа Word, например, иконки лежат в winword.exe.
Скажите, пожалуйста, это касается предыдущего коммента — как прописать относительный путь к файлу с иконкой??
Черт возьми… пожалуй, в рамках диалога выбора иконки никак. Не подумал сразу.
Сейчас смотреть нет времени, но вы можете покопаться вот в каком направлении: создайте «ярлык интернета» (не обычный!) и откройте текстовым редактором. Это обычный ini-файл. Туда, вместо URL можно прописать путь к программе. п есть некоторая вероятность, что хитрой комбинацией слешей можно сделать путь относительным, и так же поступить с путем к иконке. Напоминаю, что обычный ярлык — файл бинарный, и так просто его не поредактируешь.
Автору респект! Я попробовал этот метод, всё получилось. Да, к сожалению иконки к ярлыкам пропадают, и их приходится настраивать вручную. Что хорошо – видимо, иконки сохраняются в самом файле ярлыка, т.к. после удаления файла-источника иконки, иконка на ярлыке всё равно остаётся.
Ещё раз, спасибо! очень нужный метод! Жаль только, что работает только под виндой, под линухом не запуститься…
Автору респект.
Все это методы через Заднее место вобщето есть великий cmd.exe,
пример:
%windir%\system32\cmd.exe /C start /B /D .\Client .\Client\Client.exe
пз папки Client запустить Client.exe
На Семерке через RunDll32.exe ничего не получается. Даже при запуске от имени администратора.
А вот великий cmd.exe – работает!
пример иконки у папки (относительный путь) для Windows XP и Vista
Создайте файл desktop.ini
и пропишите в нём
[.ShellClassInfo]
IconResource=..\MacSoft\mac_os2.ico,0
IconFile=..\MacSoft\mac_os2.ico
IconIndex=0
где
..\ (любая буква диска)
MacSoft\ (папка у которой меняется иконка
mac_os2.ico,0 (сама иконка)
То папка, а разговор был о ярлыке…
Во-первых, спасибо!
Уже давно пользуюсь Вашими относительными ярлыками и даже с параметрами и даже научился делать иконку из системного набора, написав в “Смене значка”
%SystemRoot%\system32\SHELL32.dll
Но вдруг беда:
все мои относительные ярлыки не работают под Вистой!
Что делать?
Что Висте может не понравиться в строчке типа:
%windir%\system32\RunDll32.exe shell32.dll,ShellExec_RunDLL “.\path_to_exe\my.exe” “.\path_to_parameter_file\my_parameter_file”
Вероятно, что-то в таком способе вызова DLL изменилось. Точно сказать не могу.
не работает. не понятно что как нужно сделать
Во-первых, какая система? Всё сказанное относится к Windows XP, а уже на Висте, по донесениям, не работает. Сам я это дело бросил и не проверял.
Вот тут описано работающее решение.
http://www.freewaregenius.com/2008/07/24/how-to-create-shortcuts-with-a-relative-path-for-use-on-usb-drives/
Единственное, что мне пока не удалось, это когда целевой экзешник имеет русское название.
Если вам это удастся, пожалуйста сообщите.
Разумный подход: сделать bat и убрать консоль. Непонятно, что с русским. Пробовали сначала .bat запускать? Может, ваш редактор сохраняет в UTF?
Нет не UTF. В ANSI оказывается bat тоже не воспринимает русский. А я по привычке пользовался Notepad’ом, а этот гад, как выяснилось, теперь работает только в ANSI. Так что пришлось перейти на Wordpad и сохраняться в формате текста MS-DOS, т.е. ASCII – теперь русский заработал.
Кстати, а в Bat-файле можно как-то задать, чтобы целевое приложение открывалось в полноэкранном режиме?
Это вряд ли. Может, какую стороннюю программку для запуска поискать, раз уж все равно конвертировать в exe?
Что-то пока не хочется еще что-то искать.
Но почему же не срабатывает параметр MAX ?
%windir%\system32\cmd.exe /C start \directuse\total_commander\Totalcmd.exe + рабочая папка %cd% работает под windows 7 проверено. Ед тока хз че там с кавычками мутить чтобы пробел читался при выполнении команды.
Второе решение:
%windir%\system32\cmd.exe /c cd “\DirectUse\Total_Commander” & “totalcmd.exe” рабочая папка пусто. ТОже работает под windows 7
Enjoy made faka!
%comspec% /c cd /d “\DirectUse\Total_Commander”&& start “” totalcmd.exe
Запуск + убирается cmd’шное окно
Здравствуйте! Объясните, пожалуйста, где в этой строке что
%comspec% /c cd /d “\DirectUse\Total_Commander”&& start “” totalcmd.exe
Уже по разному пробовал, скорее всего чего то не понимаю.
Предположим, где-то есть папка “Папка1″, в ней есть файл “файл1.html”, делаем на него ярлык и кладем рядом с папкой “Папка1″, как я понял, чтобы ярлык заработал, строка в свойствах должна быть вот такой:
%comspec% /c cd /d “\Папка1”&& start “” Файл1.html
и рабочую папку оставляем пустой.
Но вылазит на секундку окно с надписью “Системе не удалось найти указанный путь”(windows 7 64x).
Подредактируйте, пожалуйста, чтобы работало=) буду очень благодарен!Заранее, большое спасибо!
только не %comspec%, а %windir%\system32\cmd.exe
попробуйте так
Если ярлык в тойже директории, то хватит просто %windir%\system32\cmd.exe /C start Файл1.html cd /d “\Папка1” – отвечает за перемещение к нужной директории, т.е. вместо \Папка1 надо прописать путь к директории, где хранится исполняемый файл
П.С. *** хватит просто %windir%\system32\cmd.exe /C start Файл1.html , а далее уже идет другая часть повествования.
Который раз уже захожу на этот сайт и каждый раз помогает!!!
Проблему с пробелами можно решить при помощи использования имен в DOS-виде. Например открыть Far и нажать Ctrl+N, а далее путь указывать в соответствии с новыми именами.
Когда я писал, то получилось примерно такое:
%windir%\system32\cmd.exe /C start ..\PROGRAMS\!!!POR~1\MYHOME~1.3PO\MYHOME~1.EXE , а исходний путь был:
..\Programs\!!! Portable Apps\MyHomeLib 2.1.3 Portable\MyhomeLib.exe