2

考虑以下代码:

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

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

谢谢!

4

3 回答 3

1

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

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

简短的回答:不。

于 2010-08-27T15:19:10.517 回答
0

疑。外部流程完全不知道您的事务范围。如果您是外部进程的编码员并且有办法传递事务句柄,那当然可以,但在这种情况下,可能性很小。

于 2010-06-01T16:02:03.117 回答
0

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

于 2010-06-01T16:08:26.377 回答