Process.Start()上的事务NTFS(TxF)

时间:2010-06-01 15:54:55

标签: c# acid txf

请考虑以下代码:

try
{
    using(TransactionScope)
    {
       Process.Start("SQLInstaller.EXE");
       throw new Exception();
       Commit();
    }
}
catch(Exception ex)
{
//Do something here
}

SQLInstaller.exe所做的更改是否会在此方案中回滚?更具体地说,通过Process.Start()启动的外部进程所做的更改是由TxF处理的吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

启动过程不会自动完成事务处理。

这确实是模型是隐式还是显式的问题。我们特别选择了一个显式模型,因为隐式模型极难推理。例如,考虑一下如果创建的进程关闭并进行了一个没有通过管道传递的RPC调用会是什么样的:RPC客户端和服务器是否具有一致的世界视图?

简短回答:不。

答案 1 :(得分:0)

疑。外部流程完全不了解您的交易范围。如果您是外部流程的编码人员并且有办法传递交易句柄,当然,但在这种情况下,极不可能。

答案 2 :(得分:0)

一切都取决于如何获得文件句柄。如果使用简单的File.OpenWrite或任何标准.NET文件操作方法打开文件,那么您可以非常确定其访问权限不是事务性的。每次尝试打开句柄时都需要使用CreateFileTransacted