Как запустить приложение из сетевого ресурса, чтобы иметь возможность обновить его?

Как запустить приложение из сетевого ресурса, чтобы иметь возможность обновить его?

У нас есть внутреннее настольное приложение, которое мы развернули на сетевом ресурсе. В этом каталоге есть подкаталоги для каждой версии, например, z:\Apps\ApplicationX\1.0 z:\Apps\ApplicationX\2.0 z:\Apps\ApplicationX\2.1

Я хотел бы разместить ярлык на рабочих столах пользователей, который указывает на новейшую версию приложения. Мое текущее решение — поместить текущую версию в каталог с именем "z:\Apps\ApplicationX\Current" и разместить ярлык на рабочем столе для exe-файла там.

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

Я попробовал изменить ярлык так, чтобы он указывал на пакетный файл, который копирует файл локально, а затем запускает его оттуда, но у нас всех Windows 7, и UAC вызывает проблемы с копированием файла на диск C:, куда я ожидаю его установки.

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

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

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

Есть ли у кого-нибудь еще возможные решения?

решение1

Мой предпочтительный метод — два приложения. Основное приложение у вас уже есть. Второе — это лаунчер/обновитель. Создайте ярлык для лаунчера, он проверит настройку конфигурации (зашифрованный бред, xml, простой текст, жестко закодированный непосредственно в лаунчере, что угодно) на предмет пути к исполняемому файлу для запуска, а затем запустит его. После запуска основного приложения загрузчик завершит работу.

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

Это процесс в стиле "загрузчика". Имейте крошечное вспомогательное приложение, которое указывает на полноразмерное приложение. Клиенты запускают крошечное приложение, а затем оно направляет их к правильному полному приложению.

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

решение2

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

решение3

Я согласен с DanBig, что в вашей простой ситуации, если вы не хотите сильно его переделывать (как предлагает Ruscal, что является хорошей идеей), просто запланируйте «отключение», когда вы снимаете блокировку файлов и заменяете .exe-файл (возможно, на ночь или на выходных).

«Я хотел бы разместить на рабочих столах пользователей ярлык, указывающий на последнюю версию приложения» - ОП

Что касается их размещения на рабочем столе, почему бы не сделать так, чтобы ваш ярлык указывал на z:\Apps\ApplicationX\ и не поместить туда текущий EXE-файл. Затем по мере необходимости создавать подпапки для прошлых ревизий/версий, например z:\Apps\ApplicationX\revisions. Таким образом, ярлык клиента никогда не изменится, и во время обновлений вы просто переместите существующий exe-файл в папку rev# и поместите новый/обновленный .exe-файл в папку z:\Apps\ApplicationX\.

решение4

Вы можете использовать сервер Samba, работающий на Linux. Когда вам нужно обновить приложение, просто переименуйте папку "current" и создайте новую с именем "current". Общий ресурс должен быть доступен только для чтения.

В Linux (Unix) разрешено переименование или удаление файла, и процессы, в которых открыты файлы, смогут использовать старую версию до тех пор, пока дескриптор файла не будет закрыт.

Связанный контент