Я работаю над программой, которая включает в себя движок общего назначения, некоторый контент для конкретной программы и настраиваемое автоматическое средство обновления для максимально эффективного обновления мультимедиа на многие гигабайты в нашем контенте. В последнем выпуске движка мы реорганизовали нашу структуру каталогов, так что вместо установки исполняемого файла (например) в c:\Program Files\Program\Engine.exe
он теперь находится в c:\Program Files\Program\engine\win32\NewEngine.exe
(обратите внимание, что имя движка также изменилось в этом процессе).
Проблема в том, что для запуска программы пользователю необходимо использовать ярлык, который мы устанавливаем у него в стартовом меню и (опционально) на рабочий стол. Однако перемещение движка после обновления ломает эти ярлыки. Итак, теперь мне нужно найти способ исправить все ярлыки, которые есть у пользователя для запуска программы.
Исходя из фона Unix / Mac OS X, я хотел бы просто создать символическую ссылку из старого имени исполняемого файла в новое. Однако, насколько я знаю, эквивалента символической ссылки в Windows на самом деле нет (погуглив я вижу, что есть символические ссылки в Vista и более поздних версиях, но это должно работать в XP). Я ошибаюсь в своем предположении? Есть ли в Windows эквивалент символической ссылки на исполняемый файл?
Некоторые другие возможные решения, которые приходят на ум:
- Создание небольшого исполняемого файла в старом месте, который запускает настоящий в новом месте. Есть ли какой-нибудь быстрый и простой способ создать простой исполняемый файл без заголовка, который просто запускает другую программу? Опять же, в Unix я бы просто создал сценарий оболочки, но, насколько я знаю, я могу не назвать
.bat
файл.exe
и запустить его, так что это должен быть способ фактически сгенерировать файл.exe
. - После обновления найдите все ярлыки, указывающие на исполняемый файл, и отредактируйте их. Есть ли какой-либо (эффективный и надежный) способ найти в системе все ярлыки, указывающие на заданное место, и обновить их?
- Комбинация вышеперечисленного с небольшим исполняемым файлом, который обнаруживает, что он запускается с ярлыка, и редактирует этот ярлык перед запуском реальной программы. Есть ли способ определить, что программа запускается с ярлыка, и таким образом иметь возможность редактировать этот ярлык?
Будет ли работать любой из этих вариантов, и если да, то как? Каков наилучший способ сделать это в Windows? Могу ли я пропустить какие-либо другие способы перенаправления ярлыка из одного места в другое?
изменить, чтобы добавить: у нас есть некоторые дополнительные требования:
- Многие из наших пользователей не являются техническими специалистами. О любом решении, требующем вмешательства пользователя, не может быть и речи.
- Это должно быть максимально бесшовно. Появление каких-либо дополнительных окон каждый раз, когда пользователь щелкает ярлык, недопустимо.
- Это должно быть устойчивым к большинству вещей, которые пользователь мог бы сделать, например, переупорядочить меню «Пуск» или переместить ярлык на панель быстрого запуска.
- Наши ярлыки абсолютно необходимы для работы программы, так как они передают аргументы, необходимые движку для загрузки контента (да, это далеко не идеально; я бы предпочел это исправить, но пока не могу)
- Я ищу что-то относительно быстрое и простое в реализации и чрезвычайно надежное.