Clickonce部署初体验_第1页
Clickonce部署初体验_第2页
Clickonce部署初体验_第3页
Clickonce部署初体验_第4页
Clickonce部署初体验_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、我们经常要面对的是对开发模式的选择,比如C/S模式和b/s模式。现在,很多人都似乎比较喜欢选择B/S模式进行web的开发,这其中的原因是很多的。但其中一点很重要的原因,那就是因为B/S开发的话,部署非常之容易,因为这样很容易实现"瘦客户端",客户端只需要使用浏览器就可以运行应用了。但B/S模式下开发的WEB应用,也有其不足之处,主要是由于功能实现起来,是没办法和传统的C/S模式下的winform应用相比的,很多winform下要实现的优秀功能,在Web上都很难实现,或者说有的根本没办法实现。但传统的winform,在部署上也有自己的困难之处,如果客户端多的话,每次部署和版本

2、升级都十分麻烦。在.net 2.0里,微软新推出了一项叫clickonce(一次点击)的应用程序部署技术,可以很好的解决上面的这个矛盾。在VS2005 中已经整合了clickonce的技术,使到用户可以很方便地部署winform开发的程序,很容易地管理其升级部署。clickonce能带给我们什么首先,通过clickonce技术,我们可以实现如下的部署方式:1) 在设计完winform程序后,可以选择将程序发布到如下的存贮位置:文件系统,本地的Web服务器,FTP站点,远程Web站点。2) 当应用程序部署到相应的位置后,用户可以通过浏览器浏览一个叫publish.htm的文件,点击下载的链接,将

3、应用程序下载到本机安装。这个publish.htm是部署应用程序的一个入口文件。3) 当用户安装完程序后,会自动产生快捷方式到桌面,并且在控制面版的增加删除中会找到该程序。4) 当用户启动程序时,系统可以首先去检查服务端是否有新的程序版本,如果有的话,则会自动连接服务端,查看是否有新的版本,如果有新的版本的话,则自动下载新的版本到本机并安装,这对于C/S软件的升级维护来说是个“福音”。ClickOnce 应用程序具有如下优势: 1)更新是事务处理(即,要么完全执行,要么根本不执行)。2)该应用程序不但可以脱机工作,而且还可以对其进行某种程度的控制;有一些 API 可使应用程序发现它是联机或脱机

4、;它还可以控制其自身的更新过程;3)它可以与 Visual Studio .NET 进行良好的集成,包括能够生成合适的额外文件和工具,帮助您找到运行应用程序所需的安全权限。4)它具有一个可下载必需组件(甚至 .NET Framework 自身)的 Win32“bootstraper”可执行文件。5)可以按需要或以批处理方式下载应用程序文件;6)它可在 Start 菜单中添加快捷方式; 一个简单的clickonce程序部署的例子声明:例子代码来自嘻哈呵嘿的C#版的端口扫描器(PortScanner)一文,在此感谢他允许我使用他的成果./扫描类class Scanner

5、0;           string m_host;        int m_port;        public Scanner(string host, int port)       &#

6、160;            m_host = host; m_port = port;                public void Scan()       

7、0;            /我们直接使用比较高级的TcpClient类            TcpClient tc = new TcpClient();            /设置超时时间&#

8、160;           tc.SendTimeout = tc.ReceiveTimeout = 2000;            try               

9、60;            /Console.Write("Checking port: 0", m_port);                /尝试连接         &#

10、160;      tc.Connect(m_host, m_port);                if (tc.Connected)                  &#

11、160;                 /如果连接上,证明此商品为开放状态                    Console.WriteLine("Port 0 is Open&quo

12、t;, m_port.ToString().PadRight(6);                    Form1.openedPorts.Add(m_port);                  

13、60;                     catch (System.Net.Sockets.SocketException e)                   

14、60;        /容错处理                Console.WriteLine(e.Message.ToString();                  &

15、#160;                   finally                            tc.Clo

16、se();                tc = null;                Form1.scannedCount+;          

17、60;     Form1.runningThreadCount-;                                        &

18、#160;  public partial class Form1 : Form            /已扫描端口数目        internal static int scannedCount = 0;      

19、;  /正在运行的线程数目        internal static int runningThreadCount = 0;        /打开的端口数目        internal static List<int> openedPort

20、s = new List<int>();        /起始扫描端口        static int startPort = 1;        /结束端口号        static

21、60;int endPort = 500;        /最大工作线程数        static int maxThread = 100;        public Form1()       

22、0;            InitializeComponent();                private void btnScan_Click(object sender, EventArgs e)     

23、;                                              /接收传入参数一作为要扫描的主机 &

24、#160;          string host = this.txtHost.Text.Trim();            /接收传入参数二作为端口扫描范围,如-4000            string po

25、rtRange = this.txtStart.Text+"-"+this.txtEnd.Text;            try                          

26、;  startPort = int.Parse(portRange.Split('-')0.Trim();                endPort = int.Parse(portRange.Split('-')1.Trim();         &

27、#160;              catch(System.Exception ex)                            MessageBox.S

28、how(ex.Message.ToString();                        for (int port = startPort; port < endPort; port+)      &#

29、160;                     /创建扫描类                Scanner scanner = new Scanner(host, port);&

30、#160;               Thread thread = new Thread(new ThreadStart(scanner.Scan);                thread.Name = por

31、t.ToString();                thread.IsBackground = true;                /启动扫描线程        

32、60;       thread.Start();                runningThreadCount+;                Thread.Sleep(10);  

33、;              /循环,直到某个线程工作完毕才启动另一新线程,也可以叫做推拉窗技术                while (runningThreadCount >= maxThread)     

34、;                    /空循环,直到所有端口扫描完毕            while (scannedCount + 1 < (endPort - startPort) &

35、#160;           this.lbInfo.Text = "扫描结束!"            /输出结果            String result=""

36、60;           result += "总共有" + openedPorts.Count.ToString() + "个端口打开着!n"            foreach (int port in openedPor

37、ts)                result +="端口"+ port.ToString().PadLeft(6) + "n"            if (MessageBox.Show(result, &quo

38、t;扫描信息", MessageBoxButtons.OK, MessageBoxIcon.Information) = DialogResult.OK)                            this.lbInfo.Text = ""                 &#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论