У нас есть внутреннее настольное приложение, которое мы развернули в сетевой папке. В этом каталоге есть подкаталоги для каждой версии, то есть z: \ Apps \ ApplicationX \ 1.0 z: \ Apps \ ApplicationX \ 2.0 z: \ Apps \ ApplicationX \ 2.1
Я хотел бы разместить на рабочих столах пользователей ярлык, указывающий на новейшую версию приложения. Мое текущее решение - поместить текущую версию в каталог с именем «z: \ Apps \ ApplicationX \ Current» и разместить там ярлык на рабочем столе для исполняемого файла.
Проблема в том, что когда они запускают приложение, я не могу его обновить, потому что файл заблокирован.
Я попытался изменить ярлык, чтобы указать на пакетный файл, который копирует файл локально, а затем запускает его оттуда, но мы все в Windows 7, и UAC вызывает проблемы с копированием файла на диск C: там, где я ожидал этого быть установленным.
Я полагаю, что мог бы скопировать исполняемый файл на домашний диск пользователя и запустить его оттуда, но мне не нравится идея иметь исполняемый файл на домашнем диске пользователя. Это также означает, что в сети есть несколько копий приложения, что мне не нравится.
Я также подумал, что, возможно, у меня будет ярлык для ярлыка, и я просто обновлю ярлык, но это тоже не работает.
Мое текущее решение - иметь командный файл, в котором есть команда запуска, указывающая на текущую версию, и ярлык для этого командного файла.
Есть ли у кого-нибудь еще возможные решения?
Похоже на устаревшее приложение. Лучше всего не усложнять его, а просто запланировать время простоя для обновлений.
Мой предпочтительный метод, два приложения. Главное приложение у вас уже есть. Второй - это программа запуска / обновления. Сделайте ярлык для запуска, он проверяет настройку конфигурации (зашифрованная тарабарщина, xml, простой текст, жестко закодировано непосредственно в модуле запуска, что угодно) для пути к исполняемому файлу для запуска, а затем запускает его. После запуска основного приложения загрузчик прекратит работу.
Всякий раз, когда вы получаете новую версию, вы обновляете файл конфигурации программы запуска, и при последующих запусках программы будет открываться новая версия.
Это процесс в стиле "загрузчика". У вас есть крошечное вспомогательное приложение, указывающее на полноразмерное приложение. Клиенты запускают крошечное приложение, а затем оно направляет их в нужное полное приложение.
Бонусные баллы, если ваша пусковая установка проверяет хэш-отпечатки пальцев или подписи в полноразмерных приложениях, чтобы никто не проявил творческий подход и не попытался установить ссылку на другое приложение из пусковой установки.
Я согласен с DanBig в том, что в вашей простой ситуации, если вы не хотите сильно его переделывать (как предлагает Рускал, что является хорошей идеей), просто запланируйте «отключение», когда вы снимете блокировку файла и замените файл .exe ( возможно на ночь или в выходные).
«Я хотел бы разместить на рабочих столах пользователей ярлык, указывающий на новейшую версию приложения» - OP
Что касается их вывода на рабочий стол, почему бы не указать ярлык на z: \ Apps \ ApplicationX \ и не поместить туда текущий EXE. Затем при необходимости создайте вложенные папки для прошлых ревизий / версий, например z: \ Apps \ ApplicationX \ revisions. Таким образом, ярлык клиента никогда не меняется, и во время обновлений вы просто перемещаете существующий exe в папку rev # и помещаете новый / обновленный .exe в папку z: \ Apps \ ApplicationX \.
Я согласен с DanBig и TheCleaner. У нас есть такое внутреннее приложение. Ярлык идет к \\server\share\application\application.exe
, а когда нам нужно сделать обновления, я жду, пока пользователи уйдут домой, и использую диспетчер серверов или диспетчер компьютеров, чтобы закрыть открытые файлы, чтобы можно было скопировать новые.
Это некрасиво, но все остальное уродливее, ИМХО.
Вы можете использовать сервер Samba под управлением Linux. Когда вам нужно обновить приложение, просто переименуйте «текущую» папку и создайте новую с именем «текущая». Общий ресурс должен быть доступен только для чтения.
В Linux (Unix) переименование или удаление файла разрешено, и процессы, у которых открыты файлы, смогут использовать старую версию, пока дескриптор файла не будет закрыт.