我需要通过Web服务使我的CF应用程序实现自更新。我在MSDN上找到了一篇2003年的文章,讲得很清楚。但是,我想在这里谈谈实践。是否有人真正做过这个,还是每个人都依赖第三方解决方案?
我被要求以这种方式完成它,因此如果您知道任何提示/注意事项,任何信息都会受到赞赏。
谢谢!
我需要通过Web服务使我的CF应用程序实现自更新。我在MSDN上找到了一篇2003年的文章,讲得很清楚。但是,我想在这里谈谈实践。是否有人真正做过这个,还是每个人都依赖第三方解决方案?
我被要求以这种方式完成它,因此如果您知道任何提示/注意事项,任何信息都会受到赞赏。
谢谢!
我之前曾经问过同样的问题:如何自动更新Windows Mobile应用程序
基本上你需要两个应用程序。
App1:启动实际应用程序,但也检查CAB文件(安装程序)。如果CAB文件存在,则执行CAB文件。
App2:实际应用程序。它将调用Web服务,传递版本号到服务,并在存在新版本时检索URL()。下载后,您可以选择安装cab文件并关闭。
一个潜在问题:如果您有一个安装程序放在文件系统上但无法覆盖的文件(数据库文件,日志等),则需要进行两个单独的安装。
要安装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;
}
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();
}
}