2011-12-22 64 views
2

我正在开发面向框架6的Windows Mobile应用程序。我想添加功能来升级当前在设备上运行的应用程序的修补程序。从C#代码安装/执行一个CAb文件[Windows Mobile应用程序文件]?

在Windows Mobile应用程序工作时,它应该异步检查服务器数据库中可用的任何新版本。如果补丁存在,程序应下载.cab(Windows Mobile安装程序)文件并自动安装/运行它。

主要是,我对这些疑惑:

  1. 如何下载cab文件到设备的特定文件夹中。
  2. 如何以编程方式安装cab文件。 (以编程方式触发cab文件安装,无需用户干预)

这怎么办?

请帮我这个.....

+1

您标记为'win phone 7'和'windows mobile'。你的目标是哪个平台? (我假设Windows Mobile 6,但你可以确认) – StaWho 2011-12-22 12:05:40

+0

感谢您的答复先生。是我的目标平台是Windows Mobile 6. – 2011-12-23 06:13:32

回答

2

下载文件到本地文件夹通常取决于您的存储库,即。如果将它存储在文件共享中或让我们说基于Web的代码,则需要稍微不同的代码。 您必须考虑通过某种清单文件或数据库记录提供预下载版本检查的选项,以避免下载整个补丁程序来检查其版本。

一旦你已经下载部分排序(再次,取决于存储),你可以从你的应用程序调用CAB安装通过调用wceload.exe

  Process proc = Process.Start("wceload.exe", "\"" + Path.Combine(applicationPath, updateFileName) + "\""); 
      proc.WaitForExit(); 

然而,这将要求用户进行交互,然后按“确定”在旧版本的基础上安装新版本。

[编辑] 某些设备制造商(如Intermec)在重新启动时提供自动安装CAB的方式,但这非常依赖于设备,因此您必须阅读此内容。

+2

您可以添加一些参数wceload.exe像/ noui为了避免用户交互。 – 2011-12-23 01:38:05

+0

谢谢somuch你的答复sir.how我可以下载cabfile到设备...实际上这有3个文件在其relese folder.how下载这些文件到设备。 – 2011-12-23 06:16:18

+0

你在哪里存储这些文件/你需要从哪里下载? – StaWho 2011-12-23 06:32:56

1

我解决了这个方式如下:

  1. 打开TCP/IP连接到桌面应用程序。
  2. 从PDA应用程序发送当前版本号。
  3. 在编译过程中,手动将值添加到#.inf文件版本字段中(这里我找不到在编译期间自动执行的解决方案)。
  4. 桌面应用程序在* .inf文件中查找可用版本并将其发送回PDA应用程序。
  5. PDA应用程序收到它并与正在运行的版本进行比较。
  6. 如果dektop计算机上的版本高于运行版本,则PDA应用程序会发送请求以在桌面计算机上发送CAB文件(这里可以通过对话框请求cab文件)。
  7. 台式电脑将CAB文件发送到PDA应用程序。
  8. PDA应用程序收到CAB文件并将其存储在本地。
  9. 然后通过wceload运行安装。exe参数/删除1 /无声“cab文件的完整路径”
  10. 如果安装成功,退出应用程序或重新启动PDA。
  11. 如果PDA的应用程序有

这不是代码弦数,但它完美的作品。

1

我只需要做到这一点,似乎安装部分被回答。如果有人需要下载部分,这对我有用。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.Timeout = 10000; 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     Stream receiveStream = response.GetResponseStream(); 

     using (Stream file = File.OpenWrite("\\Windows\\Desktop\\file.cab")) 
     { 
      byte[] buffer = new byte[8 * 1024]; 
      int len; 
      while ((len = receiveStream.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       file.Write(buffer, 0, len); 
      }  
     } 
相关问题