Comments 31
По поводу проверки целостности скачанной программы — это, конечно же, будет сделано, просто решил не загромаждать проект дополнительными возможностями, чтобы сконцентрироваться на основной идее.
Согласен, что для серьёзных проектов такой вариант не годится, но для внутренних офисных программ внутри корпоративной сети, думаю, вполне сгодится.
Еще можно использовать планировщик заданий для проверки и установки обновлений.
Насчет галереи — развернули собственную, довольно удобно при модульной разработке с учетом того что модули могут писать и партнеры.
Сам бы так не стал реализовывать, если делал бы именно велосипед. Смотрите: у вас апдейтер (который перекопирует файлы) — это сама программа (тот же exe файл). Можно бы было сделать 2 отдельных приложения:
1) программа, которая умеет скачивать новую программу и запускать апдейтер
2) программа апдейтер, которая не изменяется никогда
Таким образом, ключей запуска бы не потребовалось вообще.
Если вдруг понадобиться изменить логику апдейтера из пункта 2), то можно в пункте 1 скачивать логику апдейтера в dll. еxе файл же меняться не будет.
Спасибо за отзыв!
См. самый первый рисунок в начале статьи, в правой части видно, что есть две формы:
основная Form1.cs и форма для модуля обновления FormUpdater.cs.
Также посмотрите листинг файла Program.cs — основная форма запускается только после того, как модуль обновления дал «добро».
Полностью согласен,
Мой алгоритм — скачиваем дистрибутив локально (%appdata%\projectname)
Если меньше 5 мегабайт — то скачиваем и обновляем сразу, если больше скачиваем в бекграунде (последнее время стал использовать BITS) потом запускаем.
Для обновления использую bat файл — его можно сгенерировать из программы или сразу положить в дистрибутив, в него дописываю путь программы которую нужно запустить после обновления.
Запускаем его в скрытом режиме + verb runas
start /wait test.msi /passive
notepad
Запускаем процесс инсталляции и ждем его завершения, выводим только прогресс инсталляции
плюсы решения:
можно еще что-нибудь запустить, например патч которые локальные базы подправит/допишет поля и тд.
Целостность установки не повреждается, т.е если дописывать какие нибудь дополнительные файлы после инсталляции при ее удалении они останутся в системе, что ни есть гуд.
Ну и с переименованием основной программы не нужно заморачиваться — на практике понял что нельзя предусмотреть все ситуации на 100 %.
Если нужно удаляю скаченный дистр в том же батнике.
private string get_exec_filename()
{
string fullname = Application.ExecutablePath;
// Например: D:\Work\Projects\Name.exe
string[] split = { "\\" };
string[] parts = fullname.Split(split, StringSplitOptions.None);
// Получим массив из 4 элементов: D: , Work , Projects , Name.exe
if (parts.Length > 0)
return parts[parts.Length - 1]; // Последний элемент = искомое имя файла
return "";
}
можно заменить на
Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
, ну и еще половину кода так же.
Почитайте что ли гайды по coding style для языка на котором пишете. (вот один из вариантов — www.rsdn.ru/article/mag/200401/codestyle.XML)
Это просто невыносимо выглядит, вас видимо спасает что вы не в разработке работаете, а где то в «АЙТИ Отделе ООО Рога и Копыта».
Хотя диаграмма у вас очень красиво нарисована (о полезности говорить не буду).
Если кому интересно — www.videosharp.info/
Как я писал модуль обновления на C#