使用TxNTFS发生奇怪的间歇性错误

时间:2011-07-26 15:17:49

标签: c# com ntfs transactional

我正在使用事务性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的任何信息。只知道这个错误代码是非常有用的。

由于

1 个答案:

答案 0 :(得分:1)

纯粹的猜测
HRESULT 0xD0190052与STATUS_TRANSACTIONMANAGER_NOT_ONLINE非常相似,即0xC0190052 ...区别在于“N”-Bit,表示代码是否是所谓的NTSTATUS(参见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.aspx和{ {3}})......

根据您的描述,您的应用程序似乎有时会失去与事务管理器的连接,或者事务管理器不稳定/重新启动或类似...

另外,对您的COM导入定义PreserveSig(true)有助于获得一些HRESULT说明...

希望这对你的情况有意义......

编辑:

我不确定您链接到的代码是否考虑了所有可能性......在方法TransactedFile.Open中,调用scope.Complete();这是好的和必要但是如果之前的某些代码use-block中的这个调用会抛出一些异常,根据http://msdn.microsoft.com/en-us/library/cc704588%28v=PROT.10%29.aspx

,它不会被调用。