2011-07-26 1 views
2

私はトランザクションNTFSを使ってファイルシステムのファイルを読み書きしていますが、アプリケーションの再起動のみで解決される断続的なフォルトが発生していることに気付きました。エラーの スタックトレースは次のとおりです。TxNTFSを使った奇妙な断続的なエラー

System.Runtime.InteropServices.COMException (0xD0190052): Exception from HRESULT: 0xD0190052 
    at ...KtmTransactionHandle.IKernelTransaction.GetHandle(IntPtr& handle) 
    at ...KtmTransactionHandle.CreateKtmTransactionHandle(Transaction managedTransaction) 
    at ...KtmTransactionHandle.CreateKtmTransactionHandle() 
    at ...TransactedFile.Open(String path, FileMode mode, FileAccess access, FileShare share) 
    at ...TransactedFile.ReadAllText(String path) 

IKernelTransactionは、私がハンドルを取得するCOMインターフェースである:ここ

IKernelTransaction tx = (IKernelTransaction)TransactionInterop.GetDtcTransaction(Transaction.Current); 

私のコードはhttp://msdn.microsoft.com/en-us/library/cc303707.aspxに非常に似て

[ComImport] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    [Guid("79427A2B-F895-40e0-BE79-B57DC82ED231")] 
    private interface IKernelTransaction 
    { 
     void GetHandle([Out] out IntPtr handle); 
    } 

問題は私には何の情報も見つけられないということですこのCOMエラー0xD0190052のアトリビュート。このエラーコードが何であるかを知るだけで大​​いに役立ちます。

おかげ

+0

そのHRESULTコードでFormatMessage(P/Invokeまたはネイティブ)を試しましたか? – Yahia

+0

残念ながら、このコードは野生のもので、テストマシンでは見たことがありません。 0xD0190052はintをオーバーフローさせて、-1173667886をMarshal.ThrowExceptionForHRに渡し、新しいWin32Exceptionを渡しました。どちらの場合も、結果はUnknown Errorでした。 – Phill

+0

[AlphaFS](http://alphafs.codeplex.com/)オプションを使用していますか? – shambulator

答えて

1

ピュア憶測
HRESULT 0xD0190052が0xC0190052であるSTATUS_TRANSACTIONMANAGER_NOT_ONLINEするのは非常に似ている...違いは、コードは、いわゆるNTSTATUSであるかどうかを示す「N」ビットである(参照http://msdn.microsoft.com/en-us/library/0642cb2f-2075-4469-918c-4441e69c548a%28PROT.10%29.aspxhttp://msdn.microsoft.com/en-us/library/cc231200%28v=PROT.10%29.aspxhttp://msdn.microsoft.com/en-us/library/cc704588%28v=PROT.10%29.aspx)...

あなたは、それはどちらかと思われるアプリケーションが時々

...トランザクションマネージャまたはトランザクションマネージャへの接続が再開/不安定または類似している失って説明したものからまた、いくつかの HRESULT説明を取得助けることができるあなたのCOMのインポートに PreserveSig(true)をdefinig

...あなたのケースで、これはどんな意味がある

希望...

EDIT:

私はコードがそのことを確認していませんあなたがリンクされているすべての可能性を考慮している... TransactedFile.Openのメソッドでは、良いと必要ですが、使用ブロック内でこの呼び出しの前にいくつかのコードがいくつかの例外をスローする場合はそれが悪いと呼ばれていないscope.Complete();http://msdn.microsoft.com/en-us/library/ms172152.aspx

+0

良い探偵作品!妥当と思われる。問題は、接続が失われることです。私はさらに何かが現れたかどうか調べるつもりです。ありがとう! – Phill

+0

私の編集を参照してください...これは役に立ちます:-) – Yahia

+0

ありがとうございます。 TransactionScopeはusingブロック内にあり、例外がスローされた場合、Disposeメソッドが呼び出され、トランザクションとクリーンアップをロールバックする必要があります。私は何か他のものを逃している? – Phill