×

clickonce发布工具

clickonce发布工具(如何:使用 ClickOnce 发布 Office 解决方案)

admin admin 发表于2023-08-19 03:16:35 浏览40 评论0

抢沙发发表评论

本文目录

如何:使用 ClickOnce 发布 Office 解决方案

有关不同之处的信息,请参见使用 ClickOnce 发布 Office 解决方案。适用于:本主题中的信息适用于 Microsoft Office 2013 Preview 和 Microsoft Office 2010 的文档级项目和应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。说明以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。您安装的 Visual Studio 版本以及使用的设置决定了这些元素。有关更多信息,请参见Visual Studio 设置。有关本主题的视频版本,请参见(视频帮助主题:使用 ClickOnce 部署 Office 解决方案 (2007 System))。

有哪些好用的outlook插件

  首先,我要说一下什么是插件(Add-in)  插件一般是对现有程序的扩展,微软的Office系统公开了一套接口,可以很方便地让开发人员基于这些接口去实现对Office应用程序的增强。这个接口,准确地说,就是Extensibility.IDTExtensibility2.  当然,除了Office,有很多应用程序都支持类似的扩展机制,例如IE,以及Visual Studio本身,都支持一定程序的扩展。    其次,我要说一下以前是怎么开发插件Add-in的  开发Office插件(Add-in)的途径有各种各样的,我大致总结分为三类:  VBA 开发:这个是基于Visaul Basic for Application这套开发模型做的一些定制。这种定制的限制比较多一些,但开发难度相对来说更加低一些。做过VBA开发的朋友都知道,VBA是脱离不了应用程序本身的。例如Excel的VBA器如下图所示  VC++,Visual Basic开发:这种开发方式允许我们在VC++,或者VB 6中,直接实现Extensibility.IDTExtensibility2这套接口,并且可以更加灵活,做更加强大的一些定制。目前的Office应用程序中,默认就安装好了的一些插件,都是这种方式做的。例如下图是我的Outlook默认安装的一些插件列表  【备注】很早之前,我也用VB 6做过这方面的开发。但现在基本连VB 6的安装程序都找不到了。所以这里就不截图了,其实就是有一个项目模板,然后实现接口。开发这种插件,关键在于对Office本身内部的一些对象模型熟悉。  VSTO开发:所谓VSTO,全称是Visual Studio Tools for Office.我记得是从VS 2003开始提供了VSTO 1.0,简而言之,就是允许在.NET的开发环境中开发Office应用程序或者插件。这种方式有着显而易见的好处,就是能力增强,因为可以用到.NET的整套框架。VSTO发展到现在有几个版本,分别如下  VS 2003: VSTO 1.0  VS 2005: VSTO 2.0  VS 2008: VSTO 3.0  VS 2010: VSTO 4.0    VSTO 之前的版本有一些不太好的地方是部署,不要小看部署这个环节。如果你曾经花了很多精力写出来了一个很好的插件,但是因为各式各样的部署问题导致没有办法很顺利地分发给你的用户,那种感觉是很让人沮丧的。VSTO的解决方案有相当多的一些环境依赖,另外还需要提升.NET中的安全策略等等。  一个好消息是,现在的新版本中,开发和部署将是相对更加容易了。在开发方面,模板更加好用,也提供了对Ribbon的内置支持,部署方面,我们可以通过ClickOnce技术发布到网站,或者打包成一个vsto压缩包文件,很容易地进行部署。本文我们就来用一个简单例子进行说明。  然后,我们来看看在新版的开发工具中,如何快速高效地开发插件(Add-in)  作为演示,我主要侧重于开发和部署的流程。我们要实现的一个插件,其场景比较简单:  我们需要在Outlook中添加一个新的Ribbon按钮,该按钮点击之后,可以弹出一个窗口,允许我们从Excel文件中导入联系人    那就让我们开始吧  第一步:创建一个Add-in项目  这个项目模板会自动创建下面的项目结构  【备注】在ThisAddin这个类中,可以很方便地访问到Outlook的当前实例,只要使用如下的代码即可  this.Application  第二步:添加一个Ribbon  我们需要为Outlook添加一个新的Ribbon按钮,事实上这很容易做到。  我们选择Ribbon(Visual Designer),这样就可以在可视化界面中设计了  我们首先需要设置一下,这个Ribbon是在什么地方要显示。在下图中,我们将RibbonType修改为Microsoft.Outlook.Explorer,这样的意思是说,我们这个Ribbon是现在在Outlook默认的那个管理器窗口中的  接下来,我们可以添加一个按钮到group1中去。工具箱中有很多可用的控件  我最好做好的Ribbon看起来像下面这样    第三步:实现简单的逻辑  接下来,我们可以为这个按钮实现简单的逻辑  通过双击该按钮,会产生一个事件处理器  我简单地实现代码如下  using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.Office.Tools.Ribbon;using System.Windows.Forms;namespace OutlookAddInSample{public partial class MyRibbon{private void MyRibbon_Load(object sender, RibbonUIEventArgs e){}private void btImport_Click(object sender, RibbonControlEventArgs e){Form form = new Form(){Text = “Import Contacts from Excel File“,StartPosition=FormStartPosition.CenterScreen};form.Show();}}}  第四步:调试  完成如上的操作之后,一个最简单的Add-in就做好了。那么如何进行调试呢?  没错,直接按F5就可以进行调试了。此时,Outlook会自动打开,然后我们的Ribbon也确实能看到了  点击该按钮,我们也确实可以看到一个窗口被显示出来了    同时,我们在Outlook的选项对话框中也能看到这个插件的信息    第五步:发布  如果我们在本机做好了调试,那么如何分发给用户呢?以前我们一般会制作一个MSI的安装程序,现在你依然可以这么做。但我今天主要介绍的是一种更加方便的部署方式,就是通过ClickOnce技术发布到网站或者文件夹中。    【注意】这里的location是可以有下面几种的。但我这里保持默认的选择,直接发布到一个文件夹  发布如果没有遇到什么错误的话,会生成下面的一个目录  我们一般可以将这个目录,打包给用户即可。    第六步:安装  接下来,用户如果拿到了这些文件,应该如何安装使用呢?其实也很简单,它可以双击setup.exe,或者设置直接双击vsto文件也可以  一般情况下,会有一个提示。  点击“install”  然后,我们再去打开Outlook的话,仍然是可以看到这个Add-in以及它所添加的Ribbon的  第七步:卸载  最后,如果用户需要卸载这个插件,应该怎么做呢?  他们可以在Programs and Features窗口中,找到这个插件,然后点击“Uninstall”即可  

Clickonce部署 要怎么做, 什么意思

ClickOnce 部署概述 ClickOnce 是一种部署技术,使用该技术可创建自行更新的基于 Windows 的应用程序,这些应用程序可以通过最低程度的用户交互来安装和运行。ClickOnce 部署克服了部署中所固有的三个主要问题:更新应用程序的困难。 使用 Microsoft Windows Installer 部署,每次应用程序更新,用户都必须重新安装整个应用程序;使用 ClickOnce 部署,则可以自动提供更新。只有更改过的应用程序部分才会被下载,然后从新的并行文件夹重新安装完整的、更新后的应用程序。对用户的计算机的影响。 使用 Windows Installer 部署时,应用程序通常依赖于共享组件,这便有可能发生版本冲突;而使用 ClickOnce 部署时,每个应用程序都是独立的,不会干扰其他应用程序。安全权限。 Windows Installer 部署要求管理员权限并且只允许受限制的用户安装;而 ClickOnce 部署允许非管理用户安装应用程序并仅授予应用程序所需要的那些代码访问安全权限。过去,这些问题有时会使开发人员决定创建 Web 应用程序而不是基于 Windows 的应用程序,为便于安装而牺牲了 Windows 窗体丰富的用户界面和响应性。对于使用 ClickOnce 部署的应用程序,您可以集这两种技术的优势于一身。什么是 ClickOnce 应用程序? 简单说来,ClickOnce 应用程序就是任何使用 ClickOnce 技术发布的 Windows 窗体或控制台应用程序。可以采用三种不同的方法发布 ClickOnce 应用程序:从网页发布、从网络文件共享发布或是从媒体(如 CD-ROM)发布。ClickOnce 应用程序既可以安装在最终用户的计算机上并在本地运行(即使当计算机脱机时也可以运行),也可以仅以联机模式运行,而不在最终用户的计算机上永久安装任何内容。有关更多信息,请参见选择 ClickOnce 部署策略。ClickOnce 应用程序可以自行更新;这些应用程序可以在较新版本变为可用时检查较新版本,并自动替换所有更新的文件。开发人员可以指定更新行为;网络管理员也可以控制更新策略,如将更新标记为强制性的。最终用户或管理员还可以对更新进行回滚,使应用程序恢复到早期的版本。有关更多信息,请参见选择 ClickOnce 更新策略。因为 ClickOnce 应用程序在本质上是被隔离的,所以安装或运行 ClickOnce 应用程序不会干扰现有的应用程序。ClickOnce 应用程序是完全独立的;每个 ClickOnce 应用程序都安装到一个安全的基于每个用户、每个应用程序的缓存中,并从该缓存运行。默认情况下,ClickOnce 应用程序运行在 Internet 或 Intranet 安全区域中。如果有必要,应用程序可以请求提升的安全权限。有关更多信息,请参见 ClickOnce 部署和安全。ClickOnce 部署的工作方式 核心 ClickOnce 部署结构基于两个 XML 清单文件:一个应用程序清单和一个部署清单。 应用程序清单描述应用程序本身,包括程序集、组成应用程序的依赖项和文件、所需的权限以及提供更新的位置。应用程序开发人员使用 Visual Studio 2005 中的发布向导或 .NET Framework SDK 中的清单生成工具 (Mage.exe) 来创作应用程序清单。有关更多信息,请参见如何:发布 ClickOnce 应用程序。部署清单描述如何部署应用程序,包括应用程序清单的位置以及客户端应运行的应用程序的版本。管理员使用 .NET Framework SDK 中的清单生成工具 (Mage.exe) 来创作部署清单。 1 :ClickOnce部署 在客户端的 路径是不能修改的在C:\Documents and Settings\XXX\Local Settings\Apps\2.0 ,xxx是当前用户名2: 如果有第三方的dll,要想部署到客户端,在发布页面【应用程序文件(I)...】 中【发布状态】为【包括】然后发布,这样才可以保证文件会在Application.StartupPath所在路径下。3:一些文件会在【应用程序文件(I)...】中找不到,解决方法,在你的项目中要包含这些文件,如一些配置文件 *.xml,*.ini,在debug目录下,它是找不到的,一定要包含在项目中。 如果在【应用程序文件(I)...】还是出现不了,把需要被包含的文件的属性“生成操作”修改为“内容”即可 ,这样就可以再【应用程序文件(I)...】 出现了,【发布状态】为【包括】然后发布4:如果用到excel或则word编程的,你要把stdole.dll 【发布状态】为【包括】了,不然会提示客户机找不到程序集缓存,或则你在安装excel时,高级选项,把.net可编程性支持安装了,这个网上搜索下就知道了,这里不做多的说明。5:路径的问题,本机目录 bin\debug\report\1.txt bin\debug\xx.exe 客户安装完路径 : bin\debug\report\1.txt xx.exe 一个简单的clickonce程序部署的例子声明: 例子代码来自嘻哈呵嘿的C#版的端口扫描器(PortScanner)一文,在此感谢他允许我使用他的成果. //扫描类  class Scanner { string m_host; int m_port; public Scanner(string host, int port) { m_host = host; m_port = port; } public void Scan() { //我们直接使用比较高级的TcpClient类 TcpClient tc = new TcpClient(); //设置超时时间 tc.SendTimeout = tc.ReceiveTimeout = 2000; try { //Console.Write(“Checking port: {0}“, m_port); //尝试连接 tc.Connect(m_host, m_port); if (tc.Connected) { //如果连接上,证明此商品为开放状态 Console.WriteLine(“Port {0} is Open“, m_port.ToString().PadRight(6)); Form1.openedPorts.Add(m_port); } } catch (System.Net.Sockets.SocketException e) { //容错处理 Console.WriteLine(e.Message.ToString()); } finally { tc.Close(); tc = null; Form1.scannedCount++; Form1.runningThreadCount--;} } } public partial class Form1 : Form { //已扫描端口数目 internal static int scannedCount = 0; //正在运行的线程数目 internal static int runningThreadCount = 0; //打开的端口数目 internal static List《int》 openedPorts = new List《int》(); //起始扫描端口 static int startPort = 1; //结束端口号 static int endPort = 500; //最大工作线程数 static int maxThread = 100;public Form1() { InitializeComponent(); } private void btnScan_Click(object sender, EventArgs e) {//接收传入参数一作为要扫描的主机 string host = this.txtHost.Text.Trim(); //接收传入参数二作为端口扫描范围,如-4000 string portRange = this.txtStart.Text+“-“+this.txtEnd.Text; try { startPort = int.Parse(portRange.Split(’-’).Trim()); endPort = int.Parse(portRange.Split(’-’).Trim()); } catch(System.Exception ex) { MessageBox.Show(ex.Message.ToString()); } for (int port = startPort; port 《 endPort; port++) { //创建扫描类 Scanner scanner = new Scanner(host, port); Thread thread = new Thread(new ThreadStart(scanner.Scan)); thread.Name = port.ToString(); thread.IsBackground = true; //启动扫描线程 thread.Start(); runningThreadCount++; Thread.Sleep(10); //循环,直到某个线程工作完毕才启动另一新线程,也可以叫做推拉窗技术 while (runningThreadCount 》= maxThread) ; } //空循环,直到所有端口扫描完毕 while (scannedCount + 1 《 (endPort - startPort)) ; this.lbInfo.Text = “扫描结束!!“; //输出结果 String result=““; result += “总共有“ + openedPorts.Count.ToString() + “个端口打开着!\n“; foreach (int port in openedPorts) result +=“端口“+ port.ToString().PadLeft(6) + “\n“; if (MessageBox.Show(result, “扫描信息“, MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK) { this.lbInfo.Text = ““; } } }