private void dispatcherTimer_Tick(object sender, EventArgs e) { try { count++; countrasaction++; if (countrasaction == Convert.ToInt32(10)) { if (msdtcManager.IsServiceInstalledAndRunning() != true) { msdtcManager.StartService(); } } else { if (countrasaction == Convert.ToInt32(15)) { msdtcManager.NetworkDtcAccess = NetworkDTCAccessStatus.On; msdtcManager.AllowInbound = true; msdtcManager.AllowOutbound = true; msdtcManager.AllowClientDistant = true; msdtcManager.AllowAdminDistant = true; msdtcManager.AuthenticationRequired = AuthenticationRequiredType.NoAuthenticationRequired; msdtcManager.EnableXaTransactions = true; msdtcManager.EnableSnaLuTransactions = true; if (msdtcManager.NeedRestart) { msdtcManager.RestartService(); } dispatcherTimer.Stop(); } } } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message); } }
static void CheckMSDTC() { try { /* * Проверка MSDTC * */ var msdtcManager = new MsdtcManager(false, 1000); Debug.WriteLine("MSDTC: параметры службы (dcomcnfg). Установлена = {0}. Установлена и запущена = {1}.", msdtcManager.IsServiceInstalled(), msdtcManager.IsServiceInstalledAndRunning()); Debug.WriteLine("MSDTC: Network DTC. Доступ к сети DTC = {0}. Диспетчер транзакций - разрешить входящие = {1}, разрешить исходящие = {2}", msdtcManager.NetworkDtcAccess, msdtcManager.AllowInbound, msdtcManager.AllowOutbound); if (msdtcManager.NetworkDtcAccess == NetworkDTCAccessStatus.Unknown) { Debug.WriteLine("MSDTC: Настройки безопасности Network DTC недоступны. Возможно, нет доступа на чтение реестра. Проверьте настройки вручную (Требуется следующее: доступ к сети DTC = Включен; диспетчер транзакций - разрешить входящие = Включен; диспетчер транзакций - разрешить исходящие = Включен)"); } else { if (msdtcManager.NetworkDtcAccess != NetworkDTCAccessStatus.On || !msdtcManager.AllowInbound || !msdtcManager.AllowOutbound) { var toCorrect = new List <string>(); if (msdtcManager.NetworkDtcAccess != NetworkDTCAccessStatus.On) { toCorrect.Add("Доступ к сети DTC - включить"); } if (!msdtcManager.AllowInbound) { toCorrect.Add("Разрешить входящие - включить"); } if (!msdtcManager.AllowOutbound) { toCorrect.Add("Разрешить исходящие - включить"); } Debug.WriteLine("MSDTC: выполнение корректирующих действий:\r\n - " + string.Join(";\r\n - ", toCorrect) + "."); if (msdtcManager.NetworkDtcAccess != NetworkDTCAccessStatus.On) { msdtcManager.NetworkDtcAccess = NetworkDTCAccessStatus.On; } if (!msdtcManager.AllowInbound) { msdtcManager.AllowInbound = true; } if (!msdtcManager.AllowOutbound) { msdtcManager.AllowOutbound = true; } if (msdtcManager.NeedRestart) { Debug.WriteLine("MSDTC: служба требует перезагрузки, выполняем попытку..."); msdtcManager.RestartService(); Debug.WriteLine("MSDTC: служба перезагружена."); } } } } catch (Exception ex) { Debug.WriteLine("Web.MSDTC: {0}", ex.Message); } }