Share via


演练:在 ClickOnce 安装后将文档复制到最终用户计算机

更新:2010 年 9 月

使用 ClickOnce 部署后操作,您可以安装文档级 Office 解决方案,然后将文档复制到最终用户计算机。 这需要您在安装之前修改应用程序清单并对应用程序清单和部署清单进行重新签名。

**适用于:**本主题中的信息适用于 Microsoft Office 2010 和 2007 Microsoft Office system 的文档级项目和应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

本演练阐释了以下任务:

  • 创建要部署的 Office 解决方案。

  • 实现一个将文档复制到最终用户桌面的部署后操作。

  • 修改 Office 解决方案的应用程序清单,以运行该部署后操作。

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

提示

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置

系统必备组件

您需要以下组件来完成本演练:

-

Visual Studio 2010 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.100\).md)。
  • Excel 2007 或 Excel 2010。

  • 一台测试计算机。

创建新项目

首先,创建一个 Excel 工作簿项目。

创建新的 Excel 项目

  • 创建 Excel 文档级项目。 将该项目命名为 ExcelWorkbook,然后将其保存到 %USERPROFILE%\Documents\Visual Studio 2010\Projects 目录中。 有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目

    Visual Studio 会在设计器中打开新的 Excel 工作簿,并将 ExcelWorkbook 项目添加到**“解决方案资源管理器”**中。

创建定义部署后操作的类库项目

您必须在单独的类库中定义部署后操作。 部署后操作执行将文档复制到最终用户计算机的操作。

为部署后操作创建类库

  1. 在**“文件”菜单中,指向“添加”,再单击“新建项目”**。

  2. 在**“添加新项目”对话框的“已安装的模板”窗格中,单击“Windows”**。

  3. 在**“模板”窗格中,单击“类库”**。

  4. 在**“名称”字段中键入“FileCopyPDA”,然后单击“确定”**。

  5. 在**“解决方案资源管理器”中,单击“FileCopyPDA”**。

  6. 在“项目”菜单上,单击**“添加引用”**。

  7. 在**“添加引用”**对话框的“.NET”选项卡中,添加以下引用:

    • 如果 Excel 项目面向 .NET Framework 3.5,则添加对 Microsoft.VisualStudio.Tools.Applications.Runtime.v10.0 和 Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0 的引用。

    • 如果 Excel 项目面向 .NET Framework 4,则添加对 Microsoft.VisualStudio.Tools.Applications.Runtime 和 Microsoft.VisualStudio.Tools.Applications.ServerDocument 的引用。

  8. 在 Class1 代码文件中,向代码文件的顶部添加以下 usingImports 语句。

    Imports Microsoft.VisualStudio.Tools.Applications.Deployment
    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications.Deployment;
    using Microsoft.VisualStudio.Tools.Applications;
    using System.IO;
    
  9. 将类重命名为 FileCopyPDA,然后将以下代码添加到 FileCopyPDA 类中。 这段代码表示 FileCopyPDA 类继承自 IAddInPostDeploymentAction。

    Public Class FileCopyPDA
        Implements IAddInPostDeploymentAction
    
    public class FileCopyPDA : IAddInPostDeploymentAction
    
  10. 添加下列代码以实现 IAddInPostDeploymentAction.Execute 方法。 这段代码执行下列任务:

    • 如果安装或更新了解决方案,将 Excel 工作簿文件复制到用户的桌面。

    • 对于部署清单,将 _AssemblyLocation 属性从相对路径更改为完全限定路径。 这是使用 AddCustomizationRemoveCustomization 方法实现的。

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

      提示

      后期部署操作在 .NET Framework 3.5 的卸载步骤中运行。

    Sub Execute(ByVal args As AddInPostDeploymentActionArgs) Implements IAddInPostDeploymentAction.Execute
        Dim dataDirectory As String = "Data\ExcelWorkbook.xlsx"
        Dim file As String = "ExcelWorkbook.xlsx"
        Dim sourcePath As String = args.AddInPath
        Dim deploymentManifestUri As Uri = args.ManifestLocation
        Dim destPath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
        Dim sourceFile As String = System.IO.Path.Combine(sourcePath, dataDirectory)
        Dim destFile As String = System.IO.Path.Combine(destPath, file)
    
        Select Case args.InstallationStatus
            Case AddInInstallationStatus.InitialInstall, AddInInstallationStatus.Update
                System.IO.File.Copy(sourceFile, destFile)
                ServerDocument.RemoveCustomization(destFile)
                ServerDocument.AddCustomization(destFile, deploymentManifestUri)
                Exit Select
            Case AddInInstallationStatus.Uninstall
                If System.IO.File.Exists(destFile) Then
                    System.IO.File.Delete(destFile)
                End If
                Exit Select
        End Select
    End Sub
    
    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;
        }
    }
    

生成并发布解决方案

使用**“发布向导”“项目页”**来生成 Office 解决方案,并将它发布到您的开发计算机上。

发布 Excel 项目

  1. 在**“解决方案资源管理器”中,右击“FileCopyPDA”项目,然后单击“生成”**。

  2. 在**“解决方案资源管理器”中,右击“ExcelWorkbook”项目,然后单击“生成”**。

  3. 在**“解决方案资源管理器”中,右击“ExcelWorkbook”项目,然后单击“添加引用”**。

  4. 在**“添加引用”对话框中单击“项目”**选项卡。

  5. 单击**“FileCopyPDA”,然后单击“确定”**。

  6. 在**“解决方案资源管理器”中,单击“ExcelWorkbook”**项目。

  7. 在“项目”菜单上,单击**“新建文件夹”**。

  8. 键入 Data,然后按 Enter 键。

  9. 在**“解决方案资源管理器”中单击“Data”**文件夹。

  10. 在“项目”菜单上,单击**“添加现有项”**。

  11. 在**“添加现有项”对话框中,浏览到“ExcelWorkbook”**项目的输出目录。

  12. 单击**“ExcelWorkbook.xlsx”,然后单击“添加”**。

  13. 在**“解决方案资源管理器”中,单击“ExcelWorkbook.xlsx”**。

    提示

    如果您以后修改此文件,请确保通过添加该文件的最新版本来更新该文件。

  14. 在**“属性”窗口中,将“生成操作”属性更改为“内容”,并将“复制到输出目录”属性更改“如果较新则复制”**。

  15. 将**“ExcelWorkbook”**项目发布到 c:\publish 文件夹。 有关更多信息,请参见如何:使用 ClickOnce 部署 Office 解决方案

修改应用程序清单

使用 Visual Studio 的 XML 编辑器修改应用程序清单,以运行“文件复制”部署后操作。 应用程序清单的内容与列出了包装盒中的全部内容的物料单相似;应用程序清单列出了所有依赖程序集和系统必备程序集。 Office 解决方案的应用程序清单还列出了应由应用程序级外接程序和文档级自定义项的 Office 应用程序加载的程序集。

向应用程序清单添加安装依赖项

  1. 通过 Windows 资源管理器打开 c:\publish 目录。

  2. 打开 Application Files 文件夹,然后打开 ExcelWorkbook_1_0_0_0 文件夹。

  3. 在文本编辑器中打开 ExcelWorkbook.dll.manifest 文件。

  4. 在 </vstav3:update> 元素之后添加下列代码。 对于 <vstav3:entryPoint> 元素的类特性,请使用以下语法:命名空间名名称.类名称。 在本例中,命名空间和类的名称相同,所以产生的入口点名称是 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. 将 ExcelWorkbook_TemporaryKey.pfx 证书文件从 %USERPROFILE%\Documents\Visual Studio 2010\Projects\ExcelWorkbook\ExcelWorkbook 解决方案目录复制到 c:\publish\Application Files\ExcelWorkbook_1_0_0_0 目录。

  2. 打开 Visual Studio 命令提示符。

  3. 转到 c:\publish\Application Files\ExcelWorkbook_1_0_0_0 目录。

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

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

    将出现“ExcelWorkbook.dll.manifest 已成功签名”消息。

  5. 转到 c:\publish 目录。

  6. 使用以下命令对部署清单进行更新和签名:

    mage -update ExcelWorkbook.vsto -appmanifest "Application Files\Ex
    celWorkbook_1_0_0_0\ExcelWorkbook.dll.manifest" -certfile "Application Files\ExcelWorkbook_1_0_0_0\ExcelWorkbook_TemporaryKey.pfx"
    

    将出现“ExcelWorkbook.vsto 已成功签名”消息。

  7. 将 ExcelWorkbook.vsto 文件复制到 c:\publish\Application Files\ExcelWorkbook_1_0_0_0 目录。

测试部署后操作

以下过程确保更新后的清单会安装 Excel 工作簿,并将该工作簿复制到最终用户的桌面。

测试部署后操作

  1. 将 c:\publish 目录复制到测试计算机。

  2. 运行 Setup.exe 程序,或者是,如果测试计算机上已经安装了系统必备组件,双击 ExcelWorkbook.vsto 部署清单。

    将出现**“Microsoft Office 自定义项安装程序”**。

  3. 单击**“安装”**。

    **“Microsoft Office 自定义项安装程序”**对话框显示下列消息:“已成功安装 Microsoft Office 自定义项”。Excel 工作簿将复制到最终用户桌面上。

  4. 从桌面打开 ExcelWorkbook.xlsx 文件。

请参见

任务

如何:为应用程序和部署清单重新签名

概念

高级 Office 解决方案部署

其他资源

部署 Office 解决方案

修订记录

日期

修订记录

原因

2010 年 9 月

将 %USERPROFILE%\Documents\Visual Studio 10\Projects 更改为 %USERPROFILE%\Documents\Visual Studio 2010\Projects。

内容 Bug 修复