サーバーで動作するC#ウィンドウサービスを作成しています(OFFICEでインストール済み) MS Word DOCをRTFファイルに変換し、リッチテキストボックス、およびDBへのRTF文字列とプレーンテキスト文字列を取得(ユーザー検索できるようにフルテキストインデックス作成のためのプレーンテキスト文字列を取得)C#Service Word "メモリが不足していますので、今すぐ文書を保存してください"
私はしかし、それはエラーが発生しました 、サービスで変換を実行し、次のコードを使用しました行 newApp.Documents.Open "メモリが不足していますので、今すぐドキュメントを保存してください"
私はチェックしました彼はサーバーのタスクマネージャーと私は、Winword.exeがメモリの多くを読み込んでいることを発見した(60〜70 Mbと言う)とそれは終了しません(まあ、それは..... ..... _ <
私は ' Windowsフォームで同じマシンで同じコードを実行しようとすると、エラーは発生しません。 サービスは管理者として既に実行されています。
private void doc2rtf(object Source, object Target)
{
//Creating the instance of Word Application
Word.Application newApp = new Word.Application();
newApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;
newApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
// specifying the Source & Target file names
// Use for the parameter whose type are not known or
// say Missing
object Unknown = Type.Missing;
object objReadOnly = true;
object objFalse = false;
try
{
// Source document open here
// Additional Parameters are not known so that are
// set as a missing type
lw.writeLog(LogWriter.logType.DEBUG, "before newApp.Documents.Open", Source.ToString());
newApp.Documents.Open(ref Source, ref Unknown,
ref objReadOnly, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown);
lw.writeLog(LogWriter.logType.DEBUG, "after newApp.Documents.Open", Source.ToString());
// Specifying the format in which you want the output file
object format = Word.WdSaveFormat.wdFormatRTF;
//check header footer exists.
lw.writeLog(LogWriter.logType.DEBUG, "before newApp.ActiveDocument.SaveAs", Target.ToString());
//Changing the format of the document
newApp.ActiveDocument.SaveAs(ref Target, ref format,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown);
lw.writeLog(LogWriter.logType.DEBUG, "after newApp.ActiveDocument.SaveAs", Target.ToString());
}
catch (Exception e)
{
lw.writeLog(LogWriter.logType.ERROR, e.Message, "doc2rtf");
}
finally
{
lw.writeLog(LogWriter.logType.DEBUG, "before newApp.ActiveDocument.Close(", "");
newApp.ActiveDocument.Close(ref objFalse, ref Unknown, ref Unknown);
// for closing the application
lw.writeLog(LogWriter.logType.DEBUG, "after newApp.ActiveDocument.Close(", "");
lw.writeLog(LogWriter.logType.DEBUG, "before newApp.ActiveDocument.Quit(", "");
newApp.Quit(ref objFalse, ref Unknown, ref Unknown);
lw.writeLog(LogWriter.logType.DEBUG, "after newApp.ActiveDocument.Quit(", "");
newApp = null;
GC.Collect();
}
}
Wordはサーバーコンテキストで実行されることを目的としていません(また、前回チェックした場合、その使用のためにライセンスされていません)。ワードドキュメントを処理できるサードパーティのアプリケーションがあります。 –
少し興奮していますか?このサービスが複数のユーザーによって同時に使用されているかどうかはわかりません。マイクロソフトがお客様のクライアント製品ではなくオフィスWebサービスを使用することが望ましいと思われます。しかし、それは非常に良い問題を浮き彫りにしていた。 +1 – hoodaticus