- PR -

ASP.NETで動作ディレクトリを変えるとEXCELが終了しない

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-01 16:50
引用:

煉さんの書き込み (2003-12-01 16:43) より:

先ほど、共通関数化していない別プロジクトの関数をそのままコピーしてきたら何故か動きましたので、その関数をスケルトン化して少しづつ処理を組み込んでいってます。


 これは、どういうことでしょうか。共通関数化していないけれども、共通で使う関数があり、それをプロジェクト参照で呼び出していた、ということでしょうか。

 そうであるなら、Marshal.ReleaseComObjectで「何をしようとしているか」を理解してください。これらはオブジェクトそのものをリリースするのではなく、オブジェクトに対する参照カウンタを減らします。COMオブジェクトは、参照されている限り(参照カウンタが1以上である限り)リリースの対象となりません。全ての参照が外れるようになっているか、確認してください。
会議室デビュー日: 2003/12/01
投稿数: 8
投稿日時: 2003-12-01 17:29
どうも頭の中がテンパってるのか、
説明が不十分なようで申し訳ないです。

「共通関数化していないけれども、共通で使う関数」と言うわけではなく、
エクセルを扱うけども、共通化出来ない個別の処理と言うことです。
で、その関数をコピーして個別の処理部分を排除して、
今回必要な処理を組み込んで行っています。
スケルトンに、と言うのはエクセルのオブジェクト一式を用意してから開放するまでの処理のみをそのまま流用すると言う意味です。

で、プロセスが残ってしまうソースと正しく破棄されるソースとをWinDiffでチェックして見たのですが、
全く違いが見つかりませんでしたので、
未だに原因不明です。
ちょっと仕事が押してきちゃってますので、とりあえず完成させたら引き続き原因を調査しようと思ってます。
ファイルの保存で参照が残っていたので、
何らかのタイミングで何かをつかんだままの状態が発生して
参照が外れなかったとは思うのですが・・・
会議室デビュー日: 2003/12/01
投稿数: 8
投稿日時: 2003-12-01 21:30
またもや落ちなくなってしまいました。
状況ですが、
再びプロセスが殺せなくなったので、
処理をスケルトンに加えている途中でプロセスが死んでいたところまでコメントアウトで再現したのにもかかわらず、
プロセスが死ななくなっていました。
で、プロセスの死ななくなった関数をコピーしてもうひとつ用意してそちらを呼び出して見ると、
何故かプロセスが殺せました。
ソースは全く同じです。
以下は呼び出し元です。
コード:
        '' エクセル作成
        GC.Collect(2)
        intRet = newCreateXlsImg2()
        GC.Collect(2)


newCreateXlsImg関数をコピーして、
違いは関数名をnewCreateXlsImg2に変えただけです。

スキルアップ/キャリアアップ(JOB@IT)