2

次のように、Excel ファイルへの OLEDB 接続を開くとハングする Windows サービスがあります。

using (var connection = new OleDbConnection(
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
    + fileName + ";Extended Properties=\"Excel 8.0\""))
{
  connection.Open();
  // start using the connection
}

このコードは、コンソール アプリケーションとして実行すると正常に動作します。Visual Studio で Windows サービスをデバッグすると、connection.Open() の呼び出しに到達するまでコードにステップ インできます。その時点で、スレッドはハングします。例外はスローされません。[Break All] または [Stop Debugging] ボタンをクリックするまで、Visual Studio は応答し続けます。その時点で、Visual Studio もハングします。プロセスを強制終了すると、Visual Studio が再び応答するようになります。

なぜこれが起こるのか、それを解決する方法を知っている人はいますか?

編集: fileName は絶対パスです。ファイルはサービス自体によって書き込まれました。

4

2 に答える 2

2

Windowsサービス内でこれを実行しようとして失敗した後、ビジネスロジックを別のコンソールアプリケーションに抽出し、Windowsサービス内からそのアプリケーションを呼び出すだけです。正常に動作しているようです。

于 2010-01-11T08:38:12.217 に答える
0

なぜこれが発生するのかわかりませんが、ファイルを開いてバイト配列にロードすることで絞り込みを試みましたか?問題がファイルシステム/パーミッションなどにあるのかどうかを判断するために... OLE DB?ファイルを開いてバイト配列にロードできるが、OLE DBがまだハングしている場合、CPUが固定されていますか?これは、ファイルにOLE DBが処理できない何かがある可能性があることを示していますか?

これをOLEDBで機能させることができない場合は、 SpreadsheetGearfor.NETのようなサードパーティのxls/xlsxライブラリを検討しましたか?ここでライブサンプルを確認し、ここから無料トライアルをダウンロードできます。

免責事項:私はSpreadsheetGearLLCを所有しています

于 2010-01-08T16:47:12.873 に答える