PowerPoint のオートメーションにてプリントアウトした場合、RPC_E_SERVERFAULT のエラーが発生することがある

現象
PowerPoint のオートメーションにて、外部のプログラムから、OLE オブジェクトや画像オブジェクトを含む PowerPoint ファイルをプリンタのプロパティを変更した直後に印刷を実行した場合、RPC_E_SERVERFAULT のエラーが発生する場合があります。

原因
Office PIA にて実装されたメソッドは、クライアントアプリケーションから呼び出すと、PowerPoint (POWERPNT.EXE) を COM サーバーとして RPC プロトコルを使用してプロセス間通信が行われます。Office PIA 経由にて、外部プログラムから、PowerPoint 2007 ドキュメントを印刷する場合、 OLE や画像オブジェクトが埋め込まれていて、かつプリンタのプロパティを変更した直後に PrintOut メソッドを実行すると、プリンタ情報の更新と印刷が行われることになります。

ただし、この際にプリンタの状態やCOM サーバーの状態、あるいは、PowerPoint オブジェクトへのプロパティの状態を更新するために、時間を要することがあります。
その結果、PowerPoint 内で予期しない動作となり、RPC_E_SERVERFAULT のエラーがクライアントに返却されることがあります。ただし、内部的な処理に依存するため、常に発生する現象ではありません。
解決方法
回避策
検討できる対処方法として、アンマネージドでのクライント コンポーネントとして印刷処理を実装します
状況
マイクロソフトでは、この問題について現在調査中です。詳細については、わかりしだいこの資料に掲載する予定です。
詳細
以下のようなコードで発生することがあります。


using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using PowerPoint = Microsoft.Office.Interop.PowerPoint;using Core = Microsoft.Office.Core;using System.Drawing.Printing;namespace WindowsFormsApplication1{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {                PowerPoint.Application oApp = new PowerPoint.Application();                PowerPoint.Presentation oPresentation;                string filePath = "PowerPoint ファイルの絶対パスを指定";                try                {                PowerPoint.Presentations presentations = oApp.Presentations;                Microsoft.Office.Core.MsoTriState openVisibleState = Microsoft.Office.Core.MsoTriState.msoFalse;                                                oPresentation = presentations.Open(filePath,                                                        Microsoft.Office.Core.MsoTriState.msoTrue,                                                        Microsoft.Office.Core.MsoTriState.msoFalse,                                                        openVisibleState);                oPresentation.PrintOptions.PrintInBackground = Core.MsoTriState.msoFalse;                   PrintDocument pd = new PrintDocument();                oPresentation.PrintOptions.ActivePrinter = pd.PrinterSettings.PrinterName;                 oPresentation.PrintOut(1, -1, null, 1, Core.MsoTriState.msoFalse);                oPresentation.Close();                System.Runtime.InteropServices.Marshal.ReleaseComObject(oPresentation);                oPresentation = null;                oApp.Quit();                System.Runtime.InteropServices.Marshal.ReleaseComObject(oApp);                oApp = null;            }            catch (Exception ex)            {                Console.WriteLine(ex.InnerException);            }            finally            {                GC.Collect();                GC.WaitForPendingFinalizers();                GC.Collect();                         }        }}


 
関連情報
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2651891 - 最終更新日: 09/20/2016 10:40:00 - リビジョン: 2.0

Microsoft Office PowerPoint 2007

  • KB2651891
フィードバック