Wordファイルをコピーし、そのコピーを開き、ドキュメント内のいくつかの値を検索/置換して保存するアプリケーションが手元にあります。VB6またはC#のいずれかでOffice-Interopを使用すると正常に動作します。これで、エンドユーザーはcitrix-setupを使用でき、ここでドキュメントを開くコマンドを実行すると、呼び出し元のアプリケーションがクラッシュします。
例外をスローするまでのC#-example-codeを次に示します。
try
{
app = new ApplicationClass();
app.Visible = true;
object fileName = @"C:\some_document.doc";
object readOnly = false;
object isVisible = app.Visible;
object missing = System.Reflection.Missing.Value;
doc = app.Documents.Open(ref fileName,
ref missing, ref readOnly,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref isVisible,
ref missing, ref missing, ref missing);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
メッセージは「保護されたメモリの読み取りまたは書き込みを試みました。これは、他のメモリが破損していることを示していることがよくあります。」です。エラーはOpen-Commandで発生します。
前に述べたように、WordがCitrixで起動されない限り、すべてが正常に実行されます。
さて、私のオプションは何ですか?ドキュメントを編集する既存のコードを使用できるように、なぜこれが発生するのか、何を変更できるのかを知りたいです。私はライブラリを使用して、Wordをまったく使用せずに検索と置換を行うので、使用できる製品のヒントを得ることができてうれしいです。私はここで何か派手なものを探しているわけではないので、私はたくさんのお金を投資したくありません。
ああ、これらはDOCファイルであり、DOCXではありません!
私は言及するのを忘れました:ExcelとInteropで同じようなことをすることはうまくいきます!それが私を最も悩ませているものです!