Транзакционная NTFS (TxF) в Process.Start () - PullRequest
2 голосов
/ 01 июня 2010

Рассмотрим следующий код:

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

Будут ли отменены изменения, сделанные SQLInstaller.exe в этом сценарии? В частности, будут ли изменения, сделанные внешним процессом, запущенным через Process.Start (), обрабатываться TxF?

Спасибо!

Ответы [ 3 ]

1 голос
/ 27 августа 2010

Процесс запуска не будет автоматически выполнять свою работу с транзакциями.

Это действительно вопрос того, является ли модель неявной или явной . Мы выбрали явную модель специально, потому что неявную модель крайне сложно рассуждать. Рассмотрим, к примеру, как было бы, если бы созданный процесс завершил работу и сделал вызов RPC, который не передавал транзакцию: будут ли клиенты и сервер RPC иметь согласованные представления о мире?

Краткий ответ: Нет.

0 голосов
/ 01 июня 2010

Все будет зависеть от того, как будет получен дескриптор файла. Если вы откроете файл простым File.OpenWrite или любым из стандартных методов манипулирования файлами .NET, вы можете быть уверены, что его доступ не будет транзакционным. CreateFileTransacted необходимо использовать каждый раз, когда вы пытаетесь открыть ручку.

0 голосов
/ 01 июня 2010

Сомнительный. Внешний процесс абсолютно не знает о вашей транзакции. Если вы были кодировщиком внешнего процесса и могли обойти дескриптор транзакции, конечно, но в этом случае маловероятно.

...