2011-07-14 12 views
6

Errorなぜゼロバイトのapp.configファイルが非常に奇妙なエラーを引き起こすのですか?

開かれたファイルは、もはや有効であるように、ファイルのボリュームが外部的に変更されていません。

これは、ゼロバイトのapp.configがある場合に発生します。このエラーはWindowsからのもので、WinDBGでも起動されません。

ゼロバイトのapp.configは完全に無効ですが、このエラーの原因はどこから来ていますか?なぜ起こりますか?

+0

.configファイルは通常xmlファイルなので、空であっても最初はXML構造/署名が必要です。したがって、空であるconfigファイルはXMLとして解析できないので、.configファイルを変更するツールやプログラムがないため、アプリケーションの実行を停止する内部セキュリティ機構だと思いますその状態であるため、手作業で変更する必要があります。これにより、プログラムが正しく実行されません。少なくとも、セキュリティ対策のもう一つのステップです。 –

答えて

7
// 
// MessageId: ERROR_FILE_INVALID 
// 
// MessageText: 
// 
// The volume for a file has been externally altered so that the opened file is no longer valid. 
// 
#define ERROR_FILE_INVALID    1006L 

WinError.h Windows SDKヘッダーファイルからコピーされました。ここでのシンボリック・エラー・コードは、ボイラープレートのエラー・メッセージ・テキストよりもはるかに適切です。これはあまり珍しいことではありません。実行可能ファイルに適切なPE32ファイルヘッダーと管理されたアセンブリに存在する.NETヘッダーがあるかどうかを確認するコードで、SSCLI20ソースコード(CLRのオープンソースバージョン)内で使用されていることがわかります。明らかにそれはここには当てはまりません。

しかし、CLRは、ブートストラッピング段階の非常に早い時期にapp.exe.configファイルに関心があります。 <supportedRuntime>などの要素は、CLRを開始する前に解析する必要があります。明らかに、このコードは空の.configファイルに満足していません。 CLRコードはそれほど素晴らしいですが、決して「とにかくつまずく」ということは決してありません。

+0

情報ありがとう!私はWinError.hを見て覚えておきます。私は管理されたコードでこのような状況を処理する方法はないだろうと推測しています。 –

+1

もちろんあります!ファイルを修正してください。いいえ、管理コードではありません。 –

関連する問題