SharePoint サーバーからファイルを Office クライアント アプリケーションで開く仕組みについて
こんにちは SharePoint サポートの森 健吾 (kenmori) です。
今回の投稿では、SharePoint サーバーから Office ファイルをクライアント アプリケーションを使用して開く際の動作について、その仕組みを簡単にご説明します。SharePoint からファイルを開く際の問題に直面した際には、是非トラブルシュートのヒントとしてご使用いただけますと幸いです。
近年 Office は、SharePoint ないしは Web サーバー上にあるファイルと積極的に連携するために、仕組みを増やしてきた経緯があります。ただし、ActiveX、Browser Helper Object をベースに実装しており、また Office という名前が連想しにくい名前であったりするため、特にセキュリティ ソフトなどが検出した際に、無意識に無効にする方も多いと思います。
無効化すると使用できなくなるだけで、それ以外の影響はありません。ただし、業務上必要なコンポーネントを無効化してしまい、ファイルが開けないといった問題を生じさせてしまうことは不本意ですので、簡単な情報公開をさせていただければと思います。
下記にて、SharePoint からファイルを開くにあたりブラウザーから呼び出される優先順位順を含めて、モジュール一覧をご紹介します。
本投稿の構成について
1. ProtocolHandler.exe
2. SharePoint OpenDocuments Class (OWSSUPP.DLL)
3. Office Document Cache Handler (URLREDIR.DLL)
これより、それぞれのコンポーネントの 1) 動作条件 2) 動作説明 3) 動作変更方法 4) よくあるお問い合わせ 5) 開発者向けの情報としてまとめ記載します。
1. ProtocolHandler.exe
SharePoint のライブラリなどのハイパーリンクから、Office ファイルを直接開く動作を実装しています。プロトコル (例. ms-word: ms-excel: 等) に対応し、ブラウザー プロセス外で Office ファイルを直接開くようにしたプログラムです。
1) 動作条件 (下記を双方満たす)
・Office 2010 SP2、Office 2013 以降
・SharePoint Server 2013 以降、SharePoint Online
2) 動作説明
SharePoint で表示されるドキュメントへのハイパーリンクのクリック イベントで、ファイル拡張子が対応しているプロトコルに合わせて URL (例. ms-word:ofv|u|https://sharepoint/Shared%20Documents/Document.docx) 先にナビゲートした場合に作動します。
レジストリに指定されたプロトコル ハンドラー定義を見てみましょう。ブラウザーは ms-word プロトコルに登録されたハンドラー (PROTOC~1.EXE) を実行するという動作です。
この仕組みでは、ProtocolHandler.exe という外部プログラムによって Office 連携を実装しております。ブラウザー内部でロードされませんので、セキュリティの観点においても優れた方法です。
3) 動作変更方法
SharePoint On-Premise のみ変更可能となりますが、拡張子に対するプロトコル ハンドラーの登録は、サーバー上の下記の XML ファイルで実施しています。
%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\XML\DocIcon.xml
この XML ファイルの設定値を (空欄などに) 書き換えて、IISRESET を実施するとクライアント側の動作を変更することができます。
4) よくある問い合わせ
同一端末に旧バージョンの Office 2007 (または Office 2010 RTM, SP1) とOffice 2013 ファミリー製品 (例. Visio, Project, SharePoint Designer 2013) を混在インストールした場合、ProtocolHandler.exe が Office 2007 と連携できないためエラーを出力する場合が想定されます。
この動作は、複数バージョンの Office を混在インストールした際の制限事項となります。
タイトル : Office 2007 または Office 2010 クライアント環境に、Office 2013 アプリケーションを単体でインストールした場合、 SharePoint Server 2013 上の Office ファイルが開けなくなる。
アドレス : https://support.microsoft.com/kb/2874782/ja
5) 開発者向け
プロトコルを接頭辞にした URL を参照先に指定するだけでクライアント アプリケーションとの連携が可能であるため、クライアントとの連携を実装しやすくなりました。
HTML
<a href="ms-word:ofv|u|https://sharepoint/Shared%20Documents/Document.docx">TITLE</a>
JavaScript
location.href = "ms-word:ofv|u|https://sharepoint/Shared%20Documents/Document.docx ";
2. SharePoint OpenDocuments Class (OWSSUPP.DLL)
SharePoint のライブラリなどのハイパーリンクから、Office ファイルを直接開く動作を実装しています。最も古くから存在する方法です。
1) 動作条件(下記を双方満たす)
・サポートされるすべてのバージョンの Microsoft Office
・サポートされるすべてのバージョンの SharePoint Server
2) 動作説明
SharePoint で表示されるドキュメントへのハイパーリンクのクリック イベントで、onclick イベントの引数に渡されたファイルの拡張子や ProgId などを見て起動します。
Microsoft Office が提供しているものは SharePoint.OpenDocuments というクラス ID であり、JavaScript によって Active X がロードされ、ブラウザープロセス内部で Office ファイルをサーバーから直接開く処理が実行されます。
3-1) 動作変更方法 (クライアント)
Internet Explorer より [ツール] – [アドインの管理] をクリックすると、下記のように表示されます。
ここで、Active X を無効にすると、コントロール クラスがロードできなくなるため、この仕組みが動かなくなります。
3-2) 動作変更方法 (SharePoint Server)
SharePoint On-Premise のみ変更可能となりますが、SharePoint で表示されるドキュメントへのハイパーリンクのクリック イベントでは、1. ProtocolHandler.exe と同様、DocIcon.xml に記載されたファイル拡張子が対応している OpenControl を ActiveX としてロードします。
この XML ファイルの設定値を (空欄などに) 書き換えて、IISRESET を実施するとクライアント側の動作を変更することができます。
タイトル : DocIcon.xml ファイルについて
アドレス : https://msdn.microsoft.com/ja-jp/library/ms463701(v=office.14).aspx
4) よくあるお問い合わせ
Microsoft SharePoint Foundation サポートがインストールされている必要があります。
仕組み 1. protocolhandler.exe と 2 SharePoint OpenDocuments コントロールは、このコンポーネントをインストールしていない環境では動作しません。
5) 開発者向け
カスタム Web サイトなどから、JavaScript を使用して、このモジュールを呼び出したい場合は、下記のようなコードになります。
JavaScript
var stsopen = new ActiveXObject("SharePoint.OpenDocuments");
// 閲覧モードの場合
stsOpen.ViewDocument("https://sharepoint/Shared%20Documents/Document.docx", null);
// 編集モードの場合
stsOpen.EditDocument("https://sharepoint/Shared%20Documents/Document.docx", null);
3. Office Document Cache Handler (URLREDIR.DLL)
通常のハイパーリンク クリック時に、ナビゲーション先のファイルをサーバーから直接開くよう動作します。
1) 動作条件(下記を全て満たす)
・Microsoft Office 2010 以降
・サポートされるすべてのバージョンの SharePoint Server、およびDAV, MS-FSSHTTP に対応したサーバー
・Windows 7 以前のクライアント OS
2015.10.13 補足
Windows 8 からは DirectInvoke 機能が追加され、Office Document Cache Handler に置き換わる形となりました。
タイトル : Internet Explorer でアプリケーションを直接呼び出す
アドレス : https://msdn.microsoft.com/ja-jp/library/jj215788(v=vs.85).aspx
2) 動作説明
SharePoint サーバー上のファイルへのリンクをクリックした場合、おそらく上記 1. 2. までの処理で、サーバーから直接開く処理が実行されていると思います。ただし、下記のようにいくつかの例外があり、下記のリンクには JavaScript の onclick イベントが付与されていません。
・ユーザーがリッチテキスト エディターなどに張り付けたハイパーリンク (例. <A HREF="https://sharepoint/Shared%20Documents/Document.docx">TITLE</A>) をクリックした場合
・Outlook などから、メールに記載されたハイパー リンクをクリックした場合
・ドキュメントへのリンクを右クリックし、[新しいタブで開く]や [新しいウインドウで開く] をクリックした場合
・ブラウザーのアドレスバーにドキュメントへの URL を直接入力した場合
上記操作の場合、スクリプトが実行されないため 通常は SharePoint 側が意図してファイルの開き方を指定することはできません。ここで紹介する中で、唯一 SharePoint Server の設定に関係なく動作する Office 側のモジュールです。
このモジュールは、IE の Browser Helper Object (BHO) として実装されています。IE 内部でトリガーされるナビゲーションイベント (BeforeNavigate イベント) をフックして、DAV または MS-FSSHTTP に対応したサーバー (※) であると判断した場合はファイルを直接開きます。
注意
動作対象の拡張子 (docx, doc, odt, pptx, ppt, ppsx, odp, xlsx, xls, ods) がハードコードされています。
よくあるお問い合わせとして、xlsm は動作対象から除外されており、直接サーバーから開かれませんので、ご注意ください。
このモジュールの役割は、主にサーバーから直接開くことです。Office Document Cache Handler と名前がついていますが、モジュール名である URLREDIR.DLL という名前のほうが実装内容に合致しています。実際にドキュメント キャッシュを扱って、サーバーとの通信量を削減する処理を実施しているのは Office クライアント アプリケーション本体です。ただし、ファイルを直接開くことがドキュメント キャッシュを使用することの条件であり、このモジュールはその動作を実現するためのハンドラーということになります。
初回と次回以降の細かな動作の違い
サーバー側の WebDAV、MS-FSHTTP への対応状況が判断できない場合、最初はダウンロードして開きます。
Web フォルダ (ドキュメント ライブラリやアイテムごとの添付ファイル等) 単位で WebDAV、MS-FSHTTP への対応が確認できた時点で下図のようにレジストリ キー (HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\Common\Internet) に値 EnableBHO = 1 が登録されます。このキーが存在する Web フォルダ内のファイルのみ、ハイパーリンクをクリックした際にはサーバーから直接ファイルを開くように動作します。
そのため、Web フォルダごとに最初はダウンロード、次からは直接開くといった動作となりますため、全体的に見てこの仕組みが動いたり動かなかったりという印象を持つ方も多いと思います。
なお、下記のレジストリ キーを変更した際には、上記の様に一度実績がある Web フォルダのみ開くという動作をやめ、最初からサーバーより直接開いてみる動作となります。
キー : HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\Common\Internet\
値の名前 : OptimisticBHO
値の種類 : REG_DWORD
値のデータ : 1
3) 動作変更方法 (クライアント)
IE のアドオンの管理でも、有効、無効を制御できます。
4) よくあるお問い合わせ
IE のバージョンにより、既定で無効にされており、サーバーから開けない場合があります。詳しくは下記をご参考にしてください。
タイトル : Office 2010 - Performance and Caching Add-on Disabled by Default in Internet Explorer 9
アドレス : https://support.microsoft.com/kb/2463597
なお、すでに上記しましたが、xlsm は対応していません。
5) 開発者向け
特に開発者向けの情報はありません。
(補足※)
このコントロールは、SharePoint Server以外にも対応しています。例えば IIS の WebDAV 発行機能などにも対応しています。
また、記載した MS-FSSHTTP プロトコルは、SharePoint 2010 以降で追加された既定で有効化された通信手法であり、cellstorage.svc として実装されております。
ドキュメント キャッシュを使用してサーバーとの通信量を減らすためのプロトコルです。
下記の設定で有効化状況を制御できます。
タイトル : SPWebApplication.CellStorageWebServiceEnabled property
タイトル : [MS-FSSHTTP]: File Synchronization via SOAP over HTTP Protocol
アドレス : https://msdn.microsoft.com/en-us/library/dd943623(v=office.12).aspx
いかがでしたでしょうか。今回の投稿は以上となります。