johannesnestler
Привет, джоклер.007,
Я думаю, что ответ Джонни Джея хорош и поможет вам с соответствующими шагами.
Это зависит от ваших потребностей, что вы должны сделать, чтобы получить хороший пользовательский опыт. Подумайте о том, чтобы не сворачивать свое собственное решение, а использовать готовые решения для развертывания, такие как ClickOnce, в которые включен updater.
Если вы хотите создать свою собственную "систему", возможно, Вам будет полезно услышать то, что я сделал:
Updater.exe это началось из моего Target.exe (приложение для Windows)
Updater.exe заканчивается Target.exe (или ждет завершения, если Target.exe закрылась сама собой)
Updater.exe поиск возможных обновлений в источниках обновлений (configurabale) (local, Network, Internet)
Если найдены источники обновления Updater.exe делает проверку версии - если доступна более новая версия.
Если была найдена более новая версия, загрузите/скопируйте ее как новую Target.exe
Updater.exe старты Target.exe снова и закрывается сама.
Конечно, можно было бы взять много других "маршрутов" - просто пример.
У моего решения было несколько ключевых моментов - возможно, код помогает/вдохновляет вас:
Дождитесь завершения процесса
static bool WaitForProcessExit(string strProcessName, int iWaitTime)
{
Process[] aProcs = Process.GetProcessesByName(strProcessName);
// Ist der Prozess noch aktiv?
if (aProcs != null && aProcs.Length > 0)
{
// ... Wenn ja, auf Beenden warten.
return aProcs[0].WaitForExit(iWaitTime);
}
return true;
}
сравнение сборочных версий файлов для обновления без их загрузки:
static Version GetVersionFromAssemblyFullName(string strAssemblyPath)
{
string strVersion = AssemblyName.GetAssemblyName(strAssemblyPath).FullName.Split(",".ToCharArray())[1].Split("=".ToCharArray())[1];
return new Version(strVersion);
}
Version versionNew = GetVersionFromAssemblyFullName(strNewAssemblyPath);
Version versionOld = GetVersionFromAssemblyFullName(strCurrentAssemblyPath);
if (versionNew > versionOld)
...
привет Йоханнес