次の方法で共有


ClickOnce を使用して Office 2010 ドキュメントをコピーする配置後アクションを作成する

Office Visual How To

概要:  ClickOnce 配置を使用すると、Office ソリューションを配置できます。また、インストール時にユーザーのコンピューターに文書をコピーするなど、配置後アクションを実行することもできます。配置後アクションを作成するには、コードを記述し、アプリケーション マニフェストを変更する必要があります。

適用対象: Excel 2010 | Office 2010 | Open XML | PowerPoint 2010 | VBA | Word 2010

公開: 2010 年 8 月

提供元:   Robert Green, MVP、MCW Technologies (英語)

概要

シナリオ: Microsoft Visual Studio 2010 を使用して、Microsoft Word 2010 文書レベルのソリューションを作成しました。ソリューションをローカル コンピューターでテストした後、ユーザーに配置することになりました。ClickOnce を使用すると、カスタマイズ アセンブリを配置できます。ユーザーが文書を別途ダウンロードせずに済むように、文書とカスタマイズ アセンブリの両方を同時に配置します。Visual Studio Tools for Office Runtime を使用すると、ユーザーが Office ソリューションをインストールした後で配置後アクションを実行できます。配置後アクションでは、ユーザーのコンピューターへの文書のコピー、レジストリ キーの作成、データベースの作成など、さまざまな処理を実行できます。

ClickOnce では、アプリケーション マニフェストを使用して、インストールするアプリケーションとインストールの方法を指定します。アプリケーション マニフェストには、配置後アクションの実行に関する命令を含めることができます。Visual Studio では、アプリケーション マニフェストに配置後アクションを追加できません。開発者が自分でアプリケーション マニフェストを変更する必要があります。この記事では、ユーザーが Word 文書レベルのソリューションをインストールするときに、ユーザーのコンピューターに文書をコピーする配置後アクションを作成する方法を説明します。ClickOnce を使用して Office ソリューションを配置する方法の詳細については、「関連情報」セクションのリンクを参照してください。

コード化する

次の手順を実行し、配置後アクションを実行するように ClickOnce を構成します。

  1. Visual Studio 2010 で、元のサンプル プロジェクトである Post Deployment Actions Start\PostDeploymentActions.sln を読み込みます。

  2. [ファイル] メニューの [追加] を選択し、[新しいプロジェクト] をクリックします。

  3. [新しいプロジェクトの追加] ダイアログ ボックスで、[インストールされたテンプレート] ウィンドウの [Windows] を選択します。[テンプレート] ウィンドウの [クラス ライブラリ] を選択します。プロジェクトに PostDeploymentAction という名前付け、[OK] をクリックしてプロジェクトをソリューションに追加します。

  4. [プロジェクト] メニューの [参照の追加] を選択し、[参照の追加] ダイアログ ボックスを表示します。ダイアログ ボックスの [.NET] タブを選択します。

  5. ソリューションの対象を Word 2007 にする場合は、Microsoft.VisualStudio.Tools.Applications.Runtime.v10.0 および Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0 を選択します。

  6. ソリューションの対象を Word 2010 にする場合は、Microsoft.VisualStudio.Tools.Applications.Runtime および Microsoft.VisualStudio.Tools.Applications.ServerDocument を選択します。

  7. [OK] をクリックして参照を追加し、ダイアログ ボックスを閉じます。

  8. [ソリューション エクスプローラー] ウィンドウで、[Class1.vb] または [Class1.cs] を右クリックし、[名前の変更] を選択します。ファイル名を CopyWordDocument.vb または CopyWordDocument.cs に変更します。

  9. コード エディターで、ファイルの先頭に次のコードを追加します。

    Imports Microsoft.VisualStudio.Tools.Applications.Deployment
    Imports Microsoft.VisualStudio.Tools.Applications
    Imports System.IO
    using Microsoft.VisualStudio.Tools.Applications.Deployment;
    using Microsoft.VisualStudio.Tools.Applications;
    using System.IO;
  10. 配置後アクションでは IAddInPostDeploymentAction インターフェイスを実装します。CopyWordDocument クラスの宣言を変更し、このインターフェイスが実装されるようにします。クラスの宣言は次のコードのようになります。

    Public Class CopyWordDocument
      Implements IAddInPostDeploymentAction
    class CopyWordDocument: IAddInPostDeploymentAction
  11. Visual Basic では、Enter キーを押してインターフェイスに必要なプロシージャ スタブを作成します。C# では、インターフェイス名を右クリックし、[インターフェイスの実装] を選択し、[インターフェイスの実装] を (もう一度) 選択してスタブを生成します。

  12. 配置後アクションは IAddInPostDeploymentAction インターフェイスの Execute メソッドによって実行されます。C# を使用している場合は、Execute メソッドのコードを削除します。次のコードを Execute メソッドに追加します。

    Dim docsDirectory As String = "Docs\MyFabrikamWordDocument.docx"
    Dim documentFile As String = "MyFabrikamWordDocument.docx"
    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, docsDirectory)
    Dim destFile As String = System.IO.Path.Combine(destPath, documentFile)
    
    Select Case args.InstallationStatus
      Case AddInInstallationStatus.InitialInstall, _
        AddInInstallationStatus.Update
        If File.Exists(destFile) Then
          File.Delete(destFile)
        End If
        File.Copy(sourceFile, destFile)
        ServerDocument.RemoveCustomization(destFile)
        ServerDocument.AddCustomization(destFile, deploymentManifestUri)
        Exit Select
      Case AddInInstallationStatus.Uninstall
        If File.Exists(destFile) Then
          File.Delete(destFile)
        End If
        Exit Select
    End Select
    string docsDirectory = "Docs\\MyFabrikamWordDocument.docx";
    string documentFile = "MyFabrikamWordDocument.docx";
    string sourcePath = args.AddInPath;
    Uri deploymentManifestUri = args.ManifestLocation;
    string destPath = Environment.GetFolderPath(
      Environment.SpecialFolder.DesktopDirectory);
    string sourceFile = System.IO.Path.Combine(sourcePath, docsDirectory);
    string destFile = System.IO.Path.Combine(destPath, documentFile);
    
    if ((args.InstallationStatus == 
      AddInInstallationStatus.InitialInstall) || 
      (args.InstallationStatus == AddInInstallationStatus.Update))
    {
      if (File.Exists(destFile))
      {
        File.Delete(destFile);
      }
      File.Copy(sourceFile, destFile);
      ServerDocument.RemoveCustomization(destFile);
      ServerDocument.AddCustomization(destFile, deploymentManifestUri);
      return;
    }
    else if (args.InstallationStatus == 
      AddInInstallationStatus.Uninstall)
    {
      if (File.Exists(destFile))
      {
        File.Delete(destFile);
      }
      return;
    }

Visual Basic を使用していて, .NET Framework 4 を対象にしている場合、このコードのアンダースコアは不要です。

このコードは、ソリューションがインストールまたは更新されるときに、Word 文書をユーザーのデスクトップにコピーします。文書が既に存在する場合は、最初にそれを削除します。次に、文書の _AssemblyLocation プロパティを更新し、コピーされた文書からカスタマイズ アセンブリを見つけられるようにします。ソリューションがアンインストールされると、コードが文書を削除します。

> [!NOTE] >

リリース時には, .NET Framework 4 を対象にしている場合、アンインストールのコードは実行されません。ソリューションをアンインストールするときに、ユーザーが手動で文書を削除する必要があります。リリース後に予定されているサービス更新プログラムによってこの動作が変更され、アンインストール処理が実行されるようになります。

  1. [ソリューション エクスプローラー] ウィンドウで、MyFabrikamWordDocument プロジェクトを選択します。

  2. [プロジェクト] メニューの [参照の追加] を選択し、[参照の追加] ダイアログ ボックスを表示します。ダイアログ ボックスの [プロジェクト] タブを選択します。

  3. PostDeploymentActions プロジェクトを選択します。

  4. [OK] をクリックして参照を追加し、ダイアログ ボックスを閉じます。

  5. プロジェクトの Docs フォルダーで、MyFabrikamWordDocument.docx を選択します。

  6. [プロパティ] ウィンドウで、[ビルド アクション] プロパティが [コンテンツ] に設定されていること、および [出力ディレクトリにコピー] プロパティが [新しい場合はコピーする] に設定されていることを確認します。

  7. 変更を保存してソリューションをビルドします。

  8. [ビルド] メニューの [MyFabrikamWordDocument の発行] を選択します。Visual Studio の発行ウィザードが表示されます。

    図 1. 発行ウィザードを使用して Office ソリューションを発行する


    発行ウィザード

  9. アプリケーションを発行する場所を入力します。

  10. [完了] をクリックしてソリューションを発行し、発行ウィザードを閉じます。

  11. エクスプローラーで、発行フォルダーに移動します。

    図 2. 発行フォルダーの内容


    発行フォルダーの内容

    発行フォルダーには、文書とセットアップ プログラムがあります。また、配置マニフェスト (MyFabrikamWordDocument.vsto) もあります。この配置マニフェストには、アプリケーションを配置する方法が記載されています。これには、アプリケーション マニフェストの場所や、クライアントで実行されるアプリケーションのバージョンも含まれます。

  12. Application Files フォルダーをダブルクリックします。このフォルダーには MyFabrikamWordDocument_1_0_0_0 フォルダーが含まれています。ここには、バージョン 1.0.0.0 のソリューションのインストールに必要なファイルがあります。

  13. MyFabrikamWordDocument_1_0_0_0 フォルダーをダブルクリックします。

    図 3. MyFabrikamWordDocument_1_0_0_0 フォルダーの内容


    フォルダーの内容

    このフォルダーには、文書、カスタマイズ アセンブリ (MyFabrikamWordDocument.dll.deploy)、および配置後アクション アセンブリ (PostDeploymentAction.dll.deploy) があります。また、配置マニフェスト (MyFabrikamWordDocument.vsto) とアプリケーション マニフェスト (MyFabrikamWordDocument.dll.manifest) もあります。

アプリケーション マニフェストには、Office ソリューションの実行に必要な必須アセンブリおよび依存アセンブリの一覧が記載されています。また、特定の文書レベルまたはアプリケーション レベルのカスタマイズに必要なアセンブリの一覧も記載されています。このファイルを変更し、配置後アクションに関連するセクションを追加できます。変更が終わったら、アプリケーション マニフェストに再度署名する必要があります。その後は、配置マニフェストを更新し、再度署名する必要があります。

  1. Visual Studio で、[ファイル] メニューの [ファイルを開く] を選択します。

  2. [ファイルを開く] ダイアログ ボックスで、発行フォルダーの Application Files\MyFabrikamWordDocument_1_0_0_0 フォルダーに移動します。

  3. MyFabrikamWordDocument.dll.manifest を選択し、[開く] をクリックしてファイルを開きます。

  4. </vstav3:update> 要素の後ろに次の XML を追加します。

    <vstav3:postActions>
      <vstav3:postAction>
        <vstav3:entryPoint class="PostDeploymentAction.CopyWordDocument">
          <assemblyIdentity name="PostDeploymentAction"
                            version="1.0.0.0" language="neutral"
                            processorArchitecture="msil" />
        </vstav3:entryPoint>
      </vstav3:postAction>
    </vstav3:postActions>
  5. アプリケーション マニフェストへの変更を保存し、ファイルを閉じます。

  6. エクスプローラーで、MyFabrikamWordDocument プロジェクトがあるフォルダーに移動します。

  7. MyFabrikamWordDocument_TemporaryKey.pfx ファイルを、発行フォルダーの Application Files\MyFabrikamWordDocument_1_0_0_0 フォルダーにコピーします。このファイルは、Visual Studio によって作成された一時的な証明書です。ソリューションを運用環境に配置するときは、証明機関から取得した証明書を使用する必要があります。

  8. Visual Studio コマンド プロンプトを開きます。

  9. Application Files\MyFabrikamWordDocument_1_0_0_0 フォルダーに移動します。

  10. 次のコマンドをすべて 1 行で入力し、アプリケーション マニフェストに再度署名します。
    mage -sign MyFabrikamWordDocument.dll.manifest -certfile MyFabrikamWordDocument_TemporaryKey.pfx

  11. "MyFabrikamWordDocument.dll.manifest が正常に署名されました" というメッセージが表示されます。

  12. 発行フォルダーに移動します。

  13. 次のコマンドをすべて 1 行で入力し、配置マニフェストを更新して、再度署名します。
    mage -update MyFabrikamWordDocument.vsto -appmanifest "Application Files\MyFabrikamWordDocument_1_0_0_0\MyFabrikamWordDocument.dll.manifest" -certfile "Application Files\MyFabrikamWordDocument_1_0_0_0\MyFabrikamWordDocument_TemporaryKey.pfx"

  14. "MyFabrikamWordDocument.vsto が正常に署名されました" というメッセージが表示されます。

  15. エクスプローラーで、発行フォルダーの MyFabrikamWordDocument.vsto ファイルを Application Files\MyFabrikamWordDocument_1_0_0_0 フォルダーにコピーします。

  1. エクスプローラーで、発行フォルダーに移動します。

  2. Setup.exe をダブルクリックします。[Microsoft Office カスタマイズ インストーラー] ダイアログ ボックスが表示されます。

    図 4. カスタマイズのインストール中


    カスタマイズした結果のインストール

  3. "発行元を確認できません" という警告メッセージが表示されたら、[インストール] をクリックして続行します。

    図 5. 発行元を確認できないと ClickOnce の警告メッセージが表示される


    ClickOnce の警告

  4. カスタマイズが正常にインストールされたことを示すダイアログ ボックスが表示されたら、[閉じる] をクリックします。

  5. デスクトップに移動し、MyFabrikamWordDocument.docx ファイルが表示されていることを確認します。

  6. 文書を開き、カスタマイズが実行されていることを確認します。

  7. 文書を閉じます。

  8. Windows の [スタート] メニューから [コントロール パネル] を開き、[プログラムと機能] を選択します。

  9. MyFabrikamWordDocument のアイコンを選択し、[アンインストール] をクリックします。

  10. .NET Framework 3.5 を対象にしている場合は、デスクトップに移動して、文書が削除されていることを確認します。

  11. .NET Framework 4 を対象にしている場合は、デスクトップに移動して文書を削除します。

手順

Word 文書や Excel ブックをユーザーのコンピューターにコピーする処理は、配置後アクションの簡単な例に過ぎません。とはいえ、これは最も有用な例の 1 つです。カスタマイズ アセンブリは、所属先の文書やブックがなければあまり役に立ちません。カスタマイズ アセンブリのインストールは、ClickOnce が既定のままできわめてうまく処理します。このため、配置後アクションを使用して文書やブックをインストールするための手段を講じることができます。

Execute メソッドに追加するコードは、アプリケーションのインストール時、更新時、またはアンインストール時に実行されます。これにより、より複雑なロジックを記述し、より込み入ったアクションを実行できます。たとえば、Office ソリューションでローカル SQL Server Express データベースを使用する場合、データベースを作成して特定の情報を格納する配置後アクションを作成できます。また、ユーザーがソリューションをインストールするときにデータベースからテスト データを削除し、ユーザーがソリューションを更新するたびにデータベースをバックアップするアクションを作成することもできます。

Windows インストーラーを使用してセットアップ アプリケーションを作成したことがあれば、インストール時に実行されるカスタム アクションの作成には精通しているでしょう。ここで解説した手法を使用すれば、ClickOnce で Office ソリューションを配置するときに同じ機能を使用できます。

ビデオ

ビデオの視聴

ビデオを見る (英語)

ビデオの長さ: 08:42

ファイル サイズ: 18.7 MB WMV

クリックしてコードを取得  

コードを取得する (英語)

関連情報

著者について

Robert Green 氏は、開発者であり、執筆者やトレーナーとしても活動しています。また、MCW Technologies (英語) のシニア コンサルタントを務めています。Visual Studio Tools for Office system の MVP であり、Microsoft Visual Basic、Microsoft Visual C#、LINQ、および Microsoft Windows Workflow Foundation 向けの AppDev コースウェアの共同制作者でもあります。MCW に加わる前は、マイクロソフトでプロダクト マネージャーやプログラム マネージャーを務めていました。