项目架构:
1--采用智能客户端的架构,结合.net Remoting技术
2--用户在客户端只需要部署一个MainForm程序,点击具体的菜单的时候,就可以从远程服务器上下载具体功能的窗体(Control形式),在客户端应用程序下也建有一个cache目录,如果版本和服务器上的一样,就不下载了。
3--每个窗体没有使用sn强签名问题:
1--有新版本了,配置正确,用户的cache目录中的对应版本也正确
2--但是运行的时候,程序运行的还是旧的版本
3--在用户winnt\assembly\download\下有过去的所有版本
求问:
1--如何让程序一定运行最新的版本
2--如何清楚winnt\assembly\download\的缓存,不要用gacutil(用户那里没有这个工具)
最后:
谢谢每位关心这个问题的人,若解决了,我一定把方法贴上:)
1--采用智能客户端的架构,结合.net Remoting技术
2--用户在客户端只需要部署一个MainForm程序,点击具体的菜单的时候,就可以从远程服务器上下载具体功能的窗体(Control形式),在客户端应用程序下也建有一个cache目录,如果版本和服务器上的一样,就不下载了。
3--每个窗体没有使用sn强签名问题:
1--有新版本了,配置正确,用户的cache目录中的对应版本也正确
2--但是运行的时候,程序运行的还是旧的版本
3--在用户winnt\assembly\download\下有过去的所有版本
求问:
1--如何让程序一定运行最新的版本
2--如何清楚winnt\assembly\download\的缓存,不要用gacutil(用户那里没有这个工具)
最后:
谢谢每位关心这个问题的人,若解决了,我一定把方法贴上:)
客户端更新WEB引用了吗?
客户端有一个下载模块使用NetRemoting将未下载过的新的升级数据包下载。然后启动一个专门用于升级解压的进程(升级前要检查版本和备份旧版本)。
我们的客户端应用是分部模式,也有数据库和多个终端,那么每一个客户端通过XML存放本地版本,启动时检查数据库自动判断是否进行升级。这样只有分部的一个客户端进行下载,就可以实现每个终端的升级。
另外还可以利用数据库字段设定强制升级或允许不升级也可兼容。以及利用可以指定某个升级包作废。
升级包的数据可以是更新型,不必要包含以前的升级数据。
还可以通过设定检查点使客户端在升级时的版本备份保留下来,用于恢复。非检查点的备份在确定正常时可以删除。
参考网址
http://www.dotnet-magazin.de/itr/online_artikel/psecom,id,550,nodeid,31.html
还有一段代码:
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
sealed class App
{
[DllImport("fusion.dll",CharSet=CharSet.Unicode,SetLastError=true)]
static extern int GetCachePath(int flags, [Out] StringBuilder path, ref int count);
static void Main() {
StringBuilder path = new StringBuilder();
int count = 260;
GetCachePath(4, path, ref count);
try {
Directory.Delete(path.ToString(), true);
}
catch(SystemException) {
// ignore
}
}
}
This unsupported API won't work for the next .NET Framework release...
提醒继续关注的朋友,我的下载的版本是正确的,只是运行的时候不正确。
忘了说:我运行调用的方法是Assembly.Load("cache\....")