Я задал этот же вопрос некоторое время назад:
Как автоматически обновить приложение Windows Mobile
В основном вам нужно два приложения.
App1: запускает само приложение, но также проверяет наличие CAB-файла (установщик). Если есть cab-файл, он выполняет CAB-файл.
Приложение 2: фактическое применение. Он будет вызывать веб-службу, передавая номер версии службе и получая URL-адрес обратно, если существует новая версия (). После загрузки вы можете дополнительно установить файл cab и завершить работу.
Одна важная проблема: если у вас есть файлы, которые одна установка помещает в файловую систему, но не может перезаписать (файл базы данных, журнал и т. Д.), Вам потребуется две отдельные установки.
Чтобы установить кабину: найдите wceload.exe http://msdn.microsoft.com/en-us/library/bb158700.aspx
private static bool LaunchInstaller(string cabFile)
{
// Info on WceLoad.exe
//http://msdn.microsoft.com/en-us/library/bb158700.aspx
const string installerExe = "\\windows\\wceload.exe";
const string processOptions = "";
try
{
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = installerExe;
processInfo.Arguments = processOptions + " \"" + cabFile + "\"";
var process = Process.Start(processInfo);
if (process != null)
{
process.WaitForExit();
}
return InstallationSuccessCheck(cabFile);
}
catch (Exception e)
{
MessageBox.Show("Sorry, for some reason this installation failed.\n" + e.Message);
Console.WriteLine(e);
throw;
}
}
private static bool InstallationSuccessCheck(string cabFile)
{
if (File.Exists(cabFile))
{
MessageBox.Show("Something in the install went wrong. Please contact support.");
return false;
}
return true;
}
Чтобы получить номер версии: Assembly.GetExecutingAssembly (). GetName (). Version.ToString ()
Чтобы загрузить такси:
public void DownloadUpdatedVersion(string updateUrl)
{
var request = WebRequest.Create(updateUrl);
request.Credentials = CredentialCache.DefaultCredentials;
var response = request.GetResponse();
try
{
var dataStream = response.GetResponseStream();
string fileName = GetFileName();
var fileStream = new FileStream(fileName, FileMode.CreateNew);
ReadWriteStream(dataStream, fileStream);
}
finally
{
response.Close();
}
}