J'ai posé cette même question un certain temps: How to Auto-Update Windows Mobile application
Fondamentalement, vous avez besoin de deux applications.
App1: Lance l'application actuelle, mais vérifie également la présence d'un fichier CAB (programme d'installation). Si le fichier CAB est là, il exécute le fichier CAB.
App2: Application réelle. Il appelle un service Web, transmet un numéro de version au service et récupère une URL si une nouvelle version existe(). Une fois téléchargé, vous pouvez éventuellement installer le fichier cab et éteindre. Un problème potentiel: si vous avez des fichiers installés par une installation sur le système de fichiers, mais que vous ne pouvez pas les remplacer (fichier de base de données, journal, etc.), vous aurez besoin de deux installations distinctes.
Pour installer un taxi: rechercher 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;
}
Pour obtenir le numéro de version. Assembly.GetExecutingAssembly() getName() Version..ToString()
Pour télécharger un taxi:
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();
}
}
Je fais référence aux deux en fait. http://msdn.microsoft.com/en-us/library/aa446487.aspx cela fait les deux, mais c'est un vieil article et je me demandais si quelqu'un avait une expérience pratique. – sarsnake