使用 ClickOnce 部署 Office 解决方案

如果使用 ClickOnce,则可以在更少的步骤中部署 Office 解决方案。 如果发布更新,解决方案会自动检测并安装它们。 但是,ClickOnce 要求为计算机的每个用户单独安装解决方案。 因此,如果多个用户在同一台计算机上运行解决方案,则应考虑使用 Windows Installer(.msi)。

本主题内容

发布解决方案

可以使用 发布向导项目设计器发布解决方案。 在此过程中,你将使用 项目设计器 ,因为它提供了完整的发布选项集。 请参阅发布向导(Visual Studio 中的 Office 开发)。

发布解决方案

  1. 解决方案资源管理器中,选择为项目命名的节点。

  2. 在菜单栏上,选择 “Project”、“ ProjectName属性”。

  3. 项目设计器中,选择下图显示的 “发布 ”选项卡。

    项目设计器的“发布”选项卡

  4. “发布文件夹位置”(ftp 服务器或文件路径) 框中,输入希望 项目设计器 复制解决方案文件的文件夹的路径。

    可以输入以下任一类型的路径。

    • 本地路径(例如 C:\FolderName\FolderName)。

    • 网络上文件夹的统一命名约定 (UNC) 路径(例如 \\ServerName\FolderName)。

    • 相对路径(例如 PublishFolder\,它是项目默认发布到的文件夹)。

  5. “安装文件夹 URL ”框中,输入最终用户将找到解决方案的位置的完全限定路径。

    如果尚不知道位置,请不要在此字段中输入任何内容。 默认情况下,ClickOnce 会在用户从中安装解决方案的文件夹中查找更新。

  6. 选择 “先决条件 ”按钮。

  7. 在“ 先决条件 ”对话框中,确保选中“ 创建安装程序以安装必备组件 ”复选框。

  8. “选择要安装列表的先决条件 ”中,选中 Windows Installer 4.5 和相应的 .NET Framework 包的复选框。

    例如,如果解决方案面向 .NET Framework 4.5,请选中 Windows Installer 4.5Microsoft .NET Framework 4.5 完整版的复选框。

  9. 如果解决方案面向 .NET Framework 4.5,则还选中“ Visual Studio 2010 Tools for Office Runtime ”复选框。

    注释

    默认情况下,此复选框不会显示。 若要显示此复选框,必须创建 Bootstrapper 包。 请参阅 使用 Visual Studio 2012 为 Office 2013 VSTO 外接程序创建 Bootstrapper 包

  10. “指定必备组件安装位置”下,选择显示的选项之一,然后选择“ 确定 ”按钮。

    下表对每个选项进行了描述。

    选项 Description
    从组件供应商的网站下载必备组件 系统会提示用户从供应商下载并安装这些必备组件。
    从应用程序所在的同一位置下载必备组件 必备软件随解决方案一起安装。 如果选择此选项,Visual Studio 会将所有必备包复制到发布位置。 若要使此选项正常工作,先决条件包必须位于开发计算机上。
    从以下位置下载必备组件 Visual Studio 将所有必备包复制到你指定的位置,并使用解决方案安装它们。

    请参阅 “先决条件”对话框

  11. 选择 “更新 ”按钮,指定希望每个最终用户的 VSTO 外接程序或自定义项检查更新的频率,然后选择 “确定 ”按钮。

    注释

    如果要使用 CD 或可移动驱动器进行部署,请选择“ 从不检查更新 ”选项按钮。

    有关如何发布更新的信息,请参阅 发布更新

  12. 选择 “选项 ”按钮,查看“ 选项 ”对话框中的选项,然后选择“ 确定 ”按钮。

  13. 选择“ 立即发布 ”按钮。

    Visual Studio 将以下文件夹和文件添加到此过程前面指定的发布文件夹中。

    • 应用程序文件文件夹。

    • 安装程序。

    • 指向最新版本的部署清单的部署清单。

      应用程序文件文件夹包含发布的每个版本的子文件夹。 每个特定于版本的子文件夹包含以下文件。

    • 应用程序清单。

    • 部署清单。

    • 自定义程序集。

      下图显示了 Outlook VSTO 外接程序的发布文件夹的结构。

      发布文件夹结构

    注释

    ClickOnce 将 .deploy 扩展名追加到程序集上,以便在 Internet 信息服务(IIS)启用安全设置时,不会因为扩展名不安全而阻止文件。 当用户安装解决方案时,ClickOnce 将删除 .deploy 扩展。

  14. 将解决方案文件复制到此过程前面指定的安装位置。

决定如何向解决方案授予信任

在用户计算机上运行解决方案之前,必须授予信任,或者用户在安装解决方案时必须响应信任提示。 若要向解决方案授予信任,请使用标识已知和受信任的发布者的证书对清单进行签名。 请参阅 通过对应用程序和部署清单进行签名来信任解决方案

如果要部署文档级自定义项,并且想要将文档放入用户计算机上的文件夹中或使文档在 SharePoint 网站上可用,请确保 Office 信任文档的位置。 请参阅 授予对文档的信任

帮助用户安装解决方案

用户可以通过运行安装程序、打开部署清单或在文档级自定义期间直接打开文档来安装解决方案。 最佳做法是,用户应使用安装程序安装解决方案。 另外两种方法不确保已安装必备软件。 如果用户希望从安装位置打开文档,则必须将其添加到 Office 应用程序信任中心中受信任位置的列表。

打开文档级自定义的文档

用户可以直接从安装位置打开文档级自定义的文档,也可以通过将文档复制到本地计算机,然后打开副本。

最佳做法是,用户应在其计算机上打开文档的副本,以便多个用户不会尝试同时打开同一副本。 若要强制实施这种做法,可以将安装程序配置为将文档复制到用户计算机。 请参阅将解决方案的文档放置到终端用户的计算机上(仅限于文档级自定义)。

通过从 IIS 网站打开部署清单来安装解决方案

用户可以通过从 Web 打开部署清单来安装 Office 解决方案。 但是,Internet Information Services (IIS) 的安全安装将阻止扩展名 为 .vsto 的文件。 MIME 类型必须在 IIS 中定义,然后才能使用 IIS 部署 Office 解决方案。

将 .vsto MIME 类型添加到 IIS 6.0
  1. 在运行 IIS 6.0 的服务器上,选择 “启动>所有程序>管理工具>Internet Information Services(IIS)管理器”。

  2. 选择计算机名称、 网站 文件夹或要配置的网站。

  3. 在菜单栏上,选择 “操作”>“属性”

  4. “HTTP 标头 ”选项卡上,选择 “MIME 类型 ”按钮。

  5. “MIME 类型” 窗口中,选择“ 新建 ”按钮。

  6. MIME 类型 窗口中,输入 .vsto 作为扩展,输入 application/x-ms-vsto 作为 MIME 类型,然后应用新设置。

    注释

    若要使更改生效,必须重启万维网发布服务或等待工作进程回收再循环。 然后,必须刷新浏览器的磁盘缓存,然后再次尝试打开 .vsto 文件。

将 .vsto MIME 类型添加到 IIS 7.0
  1. 在运行 IIS 7.0 的服务器上,选择“ 启动>所有程序>附件”。

  2. 打开 命令提示符的快捷菜单,然后选择“ 以管理员身份运行”。

  3. “打开 ”框中,输入以下路径,然后选择“ 确定 ”按钮。

    %windir%\system32\inetsrv
    
  4. 输入以下命令,然后应用新设置。

    set config /section:staticContent /+[fileExtension='.vsto',mimeType='application/x-ms-vsto']
    

    注释

    若要使更改生效,必须重新启动万维网发布服务,或者必须等待工作进程回收再利用。 然后,必须刷新浏览器的磁盘缓存,然后再次尝试打开 .vsto 文件。

将软件解决方案的文档放入终端用户的计算机中(仅限文档级自定义)

可以通过创建一个部署后操作,为最终用户把解决方案的文档复制到他们的计算机上。 这样,用户无需在安装解决方案后将文档从安装位置手动复制到其计算机。 必须创建一个类,该类定义部署后作、生成和发布解决方案、修改应用程序清单以及重新对应用程序和部署清单进行签名。

以下过程假定项目名称为 ExcelWorkbook ,并将解决方案发布到计算机上名为 C:\publish 的已创建文件夹中。

创建一个定义部署后操作的类

  1. 在菜单栏上,选择“ 文件>添加新>项目”。

  2. 在“ 添加新项目 ”对话框中的“ 已安装的模板 ”窗格中,选择 Windows 文件夹。

  3. “模板 ”窗格中,选择 “类库 ”模板。

  4. “名称” 字段中,输入 FileCopyPDA,然后选择“ 确定 ”按钮。

  5. 解决方案资源管理器中,选择 FileCopyPDA 项目。

  6. 在菜单栏上,选择 “项目>添加引用”。

  7. .NET 选项卡上,添加对 Microsoft.VisualStudio.Tools.Applications.RuntimeMicrosoft.VisualStudio.Tools.Applications.ServerDocument的引用。

  8. 将类重命名为 FileCopyPDA,然后将文件的内容替换为代码。 此代码执行以下任务:

    • 将文档复制到用户的桌面。

    • 将_AssemblyLocation属性从相对路径更改为部署清单的完全限定路径。

    • 如果用户卸载解决方案,则删除该文件。

      using Microsoft.VisualStudio.Tools.Applications.Deployment;
      using Microsoft.VisualStudio.Tools.Applications;
      using System.IO;
      
      namespace FileCopyPDA
      {
          public class FileCopyPDA : IAddInPostDeploymentAction
          {
              public void Execute(AddInPostDeploymentActionArgs args) 
              {
                  string dataDirectory = @"Data\ExcelWorkbook.xlsx";
                  string file = @"ExcelWorkbook.xlsx";
                  string sourcePath = args.AddInPath;
                  Uri deploymentManifestUri = args.ManifestLocation;
                  string destPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
                  string sourceFile = System.IO.Path.Combine(sourcePath, dataDirectory);
                  string destFile = System.IO.Path.Combine(destPath, file);
      
                  switch (args.InstallationStatus)
                  {
                      case AddInInstallationStatus.InitialInstall:
                      case AddInInstallationStatus.Update:
                          File.Copy(sourceFile, destFile);
                          ServerDocument.RemoveCustomization(destFile);
                          ServerDocument.AddCustomization(destFile, deploymentManifestUri);
                          break;
                      case AddInInstallationStatus.Uninstall:
                          if (File.Exists(destFile))
                          {
                              File.Delete(destFile);
                          }
                          break;
                  }
              }
          }
      }
      

生成和发布解决方案

  1. 解决方案资源管理器中,打开 FileCopyPDA 项目的快捷菜单,然后选择“ 生成”。

  2. 打开 ExcelWorkbook 项目的快捷菜单,然后选择“ 生成”。

  3. 打开 ExcelWorkbook 项目的快捷菜单,然后选择 “添加引用”。

  4. 在“ 添加引用 ”对话框中,选择“ 项目 ”选项卡,选择 “FileCopyPDA”,然后选择“ 确定 ”按钮。

  5. 解决方案资源管理器中,选择 ExcelWorkbook 项目。

  6. 在菜单栏上,选择 “项目>新建文件夹”。

  7. 输入 数据,然后选择 Enter 键。

  8. 解决方案资源管理器中,选择 “数据” 文件夹。

  9. 在菜单栏上,选择 “项目>添加现有项”。

  10. 在“ 添加现有项 ”对话框中,浏览到 ExcelWorkbook 项目的输出目录,选择 ExcelWorkbook.xlsx 文件,然后选择“ 添加 ”按钮。

  11. 解决方案资源管理器 中,选择 ExcelWorkbook.xlsx 文件。

  12. “属性” 窗口中,将 “生成操作” 属性更改为 “内容”,将 “复制到输出目录” 属性更改为 “较新时复制”

    完成这些步骤后,项目将类似于下图。

    部署后操作的项目结构。

  13. 发布 ExcelWorkbook 项目。

修改应用程序清单

  1. 使用文件资源管理器打开解决方案目录 c:\publish

  2. 打开 应用程序文件 文件夹,然后打开与解决方案最新版本相对应的文件夹。

  3. 在文本编辑器(如记事本)中打开 ExcelWorkbook.dll.manifest 文件。

  4. </vstav3:update> 元素之后,添加以下代码。 对于元素的 <vstav3:entryPoint> 类属性,请使用以下语法: NamespaceName.ClassName。 在下面的示例中,命名空间和类名相同,因此生成的入口点名称为 FileCopyPDA.FileCopyPDA

    <vstav3:postActions>
      <vstav3:postAction>
        <vstav3:entryPoint
          class="FileCopyPDA.FileCopyPDA">
          <assemblyIdentity
            name="FileCopyPDA"
            version="1.0.0.0"
            language="neutral"
            processorArchitecture="msil" />
        </vstav3:entryPoint>
        <vstav3:postActionData>
        </vstav3:postActionData>
      </vstav3:postAction>
    </vstav3:postActions>
    

重新对应用程序和部署清单进行签名

  1. %USERPROFILE%\Documents\Visual Studio 2013\Projects\ExcelWorkbook\ExcelWorkbook\ExcelWorkbook 文件夹中,复制 ExcelWorkbook_TemporaryKey.pfx 证书文件,然后将其粘贴到 PublishFolder\Application Files\ExcelWorkbook_MostRecentPublishedVersion 文件夹中。

  2. 打开 Visual Studio 命令提示符,然后将目录更改为 c:\publish\Application Files\ExcelWorkbook_MostRecentPublishedVersion 文件夹(例如 c:\publish\Application Files\ExcelWorkbook_1_0_0_4)。

  3. 运行以下命令对修改的应用程序清单进行签名:

    mage -sign ExcelWorkbook.dll.manifest -certfile ExcelWorkbook_TemporaryKey.pfx
    

    将显示消息“ExcelWorkbook.dll.manifest 已成功签名”。

  4. 更改为 c:\publish 文件夹,然后运行以下命令更新并签名部署清单:

    mage -update ExcelWorkbook.vsto -appmanifest "Application Files\Ex
    celWorkbookMostRecentVersionNumber>\ExcelWorkbook.dll.manifest" -certfile "Application Files\ExcelWorkbookMostRecentVersionNumber>\ExcelWorkbook_TemporaryKey.pfx"
    

    注释

    在上一个示例中,将 MostRecentVersionNumber 替换为最近发布的解决方案版本的版本号(例如 1_0_0_4)。

    将显示消息“ExcelWorkbook.vsto 已成功签名”。

  5. ExcelWorkbook.vsto 文件复制到 c:\publish\Application Files\ExcelWorkbook_MostRecentVersionNumber 目录。

将解决方案的文档放到运行 SharePoint 的服务器上(仅限文档级自定义项)

可以使用 SharePoint 将文档级自定义发布到最终用户。 当用户转到 SharePoint 网站并打开文档时,运行时会自动将解决方案从共享网络文件夹安装到用户的本地计算机。 在本地安装解决方案后,即使文档复制到其他位置(如桌面),自定义仍会正常运行。

将文档放在运行 SharePoint 的服务器上

  1. 将解决方案文档添加到 SharePoint 网站上的文档库。

  2. 执行以下方法之一的步骤:

    • 使用 Office 配置工具将运行 SharePoint 的服务器添加到所有用户计算机上的 Word 或 Excel 中的信任中心。

      请参阅 Office 2010 中的安全策略和设置

    • 确保每个用户执行以下步骤。

      1. 在本地计算机上,打开 Word 或 Excel,选择“ 文件 ”选项卡,然后选择 “选项 ”按钮。

      2. “信任中心 ”对话框中,选择 “受信任的位置 ”按钮。

      3. 选中 允许网络上的受信任位置(不推荐) 复选框,然后选择 添加新位置 按钮。

      4. “路径” 框中,输入 SharePoint 文档库的 URL,其中包含已上传的文档(例如, http://SharePointServerName/TeamName/ProjectName/DocumentLibraryName)。

        不要添加默认网页的名称,例如 default.aspxAllItems.aspx

      5. 选中 此位置的子文件夹也受信任 复选框,然后选择“ 确定 ”按钮。

        当用户从 SharePoint 网站打开文档时,文档将打开,并安装自定义项。 用户可以将文档复制到其桌面。 由于文档中的属性指向文档的网络位置,自定义仍会运行。

创建自定义安装程序

可以为 Office 解决方案创建自定义安装程序,而不是使用发布解决方案时为你创建的安装程序。 例如,可以使用登录脚本启动安装,也可以使用批处理文件来安装解决方案,而无需用户交互。 如果已在最终用户计算机上安装必备组件,则这些方案最适用。

作为自定义安装过程的一部分,请调用 Office 解决方案的安装程序工具(VSTOInstaller.exe),默认情况下安装在以下位置:

%commonprogramfiles%\microsoft shared\VSTO\10.0\VSTOInstaller.exe

如果该工具不在该位置,可以使用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSTO Runtime Setup\v4\InstallerPathHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VSTO Runtime Setup\v4\InstallerPath 注册表项查找该工具的路径。

可以将以下参数用于 VSTOinstaller.exe

参数 Definition
/Install 或 /I 安装解决方案。 必须使用部署清单的路径遵循此选项。 可以在本地计算机上指定路径,即通用命名约定 (UNC) 文件共享。 可以指定本地路径(C:\FolderName\PublishFolder)、相对路径(Publish\)或完全限定的位置(\\ServerName\FolderName 或 http:// ServerName/FolderName)。
/Uninstall 或 /U 卸载解决方案。 必须使用部署清单的路径遵循此选项。 可以指定一个路径,该路径可以在本地计算机上或作为 UNC 文件共享。 可以指定本地路径(c:\FolderName\PublishFolder)、相对路径(Publish\)或完全限定的位置(\\ServerName\FolderName 或 http:// ServerName/FolderName)。
/Silent 或 /S 安装或卸载而不提示用户输入或显示任何消息。 如果需要信任提示,则不会安装或更新自定义项。
/Help 或 /? 显示帮助信息。

运行 VSTOinstaller.exe时,可能会出现以下错误代码。

错误代码 Definition
0 解决方案已成功安装或卸载,或者 VSTOInstaller 帮助界面已出现。
-100 一个或多个命令行选项无效或多次设置。 有关详细信息,请输入“vstoinstaller /?” 或参阅 Create a custom installer for a ClickOnce Office solution.
-101 一个或多个命令行选项无效。 有关详细信息,请输入“vstoinstaller /?”。
-200 部署清单 URI 无效。 有关详细信息,请输入“vstoinstaller /?”。
-201 无法安装解决方案,因为部署清单无效。 请参阅 Office 解决方案的部署清单
-202 无法安装解决方案,因为应用程序清单的 Visual Studio Tools for Office 部分无效。 请参阅 Office 解决方案的应用程序清单
-203 无法安装解决方案,因为发生了下载错误。 检查部署清单的 URI 或网络文件位置,然后重试。
-300 无法安装解决方案,因为发生了安全异常。 请参阅 安全 Office 解决方案
-400 无法安装解决方案。
-401 无法卸载解决方案。
-500 作已被取消,因为无法安装或卸载解决方案,或者无法下载部署清单。

发布更新

若要更新解决方案,请使用 项目设计器发布向导再次发布该解决方案,然后将更新的解决方案复制到安装位置。 将文件复制到安装位置时,请确保要覆盖旧文件。

解决方案下次检查更新时,它会自动查找并加载新版本。

更改解决方案的安装位置

可以在发布解决方案后添加或更改安装路径。 出于以下一个或多个原因,可能需要更改安装路径:

  • 安装程序是在安装路径已知之前编译的。

  • 解决方案文件已复制到其他位置。

  • 承载安装文件的服务器具有新的名称或位置。

    若要更改解决方案的安装路径,必须更新安装程序,然后用户必须运行它。 对于文档级自定义项,用户还必须更新其文档中的属性以指向新位置。

注释

如果不想要求用户更新其文档属性,可以要求用户从安装位置获取更新的文档。

更改安装程序中的安装路径

  1. 打开 命令提示符 窗口,然后将目录更改为安装文件夹。

  2. 运行安装程序,并包含参数 /url ,该参数将新的安装路径作为字符串。

    以下示例演示如何将安装路径更改为 Fabrikam 网站上的某个位置,但可以将该 URL 替换为所需的路径:

    setup.exe /url="http://www.fabrikam.com/newlocation"
    

    注释

    如果出现消息并指出可执行文件的签名将失效,则用于对解决方案进行签名的证书不再有效,并且发布者未知。 因此,用户需要确认他们信任解决方案的来源,然后才能安装解决方案。

    注释

    若要显示 URL 的当前值,请运行 setup.exe /url

    对于文档级自定义,用户必须打开该文档,然后更新其_AssemblyLocation属性。 以下步骤描述用户如何执行此任务。

更新文档中的 _AssemblyLocation 属性

  1. 在“ 文件 ”选项卡上,选择“ 信息”,如下图所示。

    Excel 中的“信息”选项卡

  2. “属性” 列表中,选择“ 高级属性”,如下图所示。

    Excel 中的高级属性。

  3. “属性”列表中的“自定义”选项卡上,选择_AssemblyLocation,如下图所示。

    AssemblyLocation 属性。

    “值”框包含部署清单标识符。

  4. 在标识符之前,输入文档的完全限定路径,后跟条形,格式为 路径|标识符 (例如 ,File://ServerName/FolderName/FileName|74744e4b-e4d6-41eb-84f7-ad20346fe2d9

    有关如何设置此标识符格式的详细信息,请参阅 自定义文档属性概述

  5. 选择 “确定 ”按钮,然后保存并关闭文档。

  6. 在没有 /url 参数的情况下运行安装程序,以在指定位置安装解决方案。

将解决方案恢复到前一个版本

回滚解决方案时,会将用户还原回该解决方案的早期版本。

回滚解决方案

  1. 打开解决方案的安装位置。

  2. 在顶级发布文件夹中,删除部署清单( .vsto 文件)。

  3. 查找您要回滚到的版本对应的子文件夹。

  4. 将部署清单从该子文件夹复制到顶级发布文件夹。

    例如,若要将名为 OutlookAddIn1 的解决方案从版本 1.0.0.1 回滚到版本 1.0.0.0,请从 OutlookAddIn1_1_0_0_0 文件夹中复制 OutlookAddIn1.vsto 文件。 将文件粘贴到顶级发布文件夹中,覆盖已存在 OutlookAddIn1_1_0_0_1 的版本特定的部署清单。

    下图显示了此示例中的发布文件夹结构。

    发布文件夹结构

    下次用户打开应用程序或自定义文档时,将检测到部署清单更改。 Office 解决方案的早期版本从 ClickOnce 缓存运行。

注释

仅为一个先前版本的方案保存本地数据。 如果回滚两个版本,则不会保留本地数据。 有关本地数据的详细信息,请参阅 ClickOnce 应用程序中访问本地数据和远程数据