2

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

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 インターフェイスです。

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

ここ

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

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

問題は、この COM エラー 0xD0190052 に関する情報が見つからないことです。このエラー コードが何であるかを知るだけでも、非常に役立ちます。

ありがとう

4

1 に答える 1

1

純粋な推測
HRESULT0xD0190052は、0xC0190052であるSTATUS_TRANSACTIONMANAGER_NOT_ONLINEと非常によく似ています...違いは、コードがいわゆるNTSTATUSであるかどうかを示す「N」ビットにあります(http://msdn.microsoft.com/enを参照)。 -us / library / 0642cb2f-2075-4469-918c-4441e69c548a%28PROT.10%29.aspxおよびhttp://msdn.microsoft.com/en-us/library/cc231200%28v=PROT.10%29.aspxおよびhttp://msdn.microsoft.com/en-us/library/cc704588%28v=PROT.10%29.aspx).. ..

あなたが説明していることから、アプリケーションがトランザクションマネージャへの接続を失うことがあるか、トランザクションマネージャが不安定/再起動されているか、または同様のようです...

またPreserveSig(true)、COMインポートを定義すると、HRESULT説明を取得するのに役立ちます...

これがあなたの場合に意味があることを願っています...

編集:

リンクしたコードがすべての可能性を考慮しているかどうかはわかりません...メソッドTransactedFile.Openscope.Complete();は適切で必要な呼び出しがありますが、using-block内のこの呼び出しの前のコードが例外をスローした場合はそうではありませんhttp://msdn.microsoft.com/en-us/library/ms172152.aspxによると悪いと呼ばれる

于 2011-07-26T15:50:32.243 に答える