public List <string> GetRuTokens() { // Вывод списка токенов, установленных в системе var manager = new PCSCReadersManager(); manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); var tokens = manager.OfType <ISCard>().Where(device => device.ReaderName.ToLower().Contains("tok")).ToList(); var activeDevsName = new List <string>(); foreach (var token in tokens) { PolicySmartcardBase testConnect = null; try { testConnect = new PolicySmartcardBase(token); testConnect.Connect(); } catch { testConnect = null; } finally { if (testConnect != null) { activeDevsName.Add(testConnect.BaseCard.ReaderName); testConnect.Disconnect(); } } } manager.ReleaseContext(); return(activeDevsName); }
void SearchReaders() { PCSCReadersManager manager = new PCSCReadersManager(); try { ReadersComboBox.Items.Clear(); manager.EstablishContext(SmartCard.PCSC.READERSCONTEXTSCOPE.SCOPE_USER); manager.OfType <ISCard>().ToList().ForEach(reader => { ReadersComboBox.Items.Add(reader.ReaderName); }); if (ReadersComboBox.Items.Count > 0) { ReadersComboBox.Text = ReadersComboBox.Items[0].ToString(); } manager.ReleaseContext(); } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка получения списка ридеров"); } }
public List <string> GetCardReaders() { // Вывод списка кард-ридеров, установленных в системе var manager = new PCSCReadersManager(); manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); var cards = manager.OfType <ISCard>().ToList(); var activeDevsName = new List <string>(); foreach (var card in cards) { PolicySmartcardBase testConnect = null; try { testConnect = new PolicySmartcardBase(card); } catch (Exception) { testConnect = null; } finally { if (testConnect != null) { activeDevsName.Add(testConnect.BaseCard.ReaderName); } } } manager.ReleaseContext(); return(activeDevsName); }
public CardInfoStrings GetCardInfo() { var manager = new PCSCReadersManager(); // Установление соединения с смарт-карт API manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); // Вывод списка ридеров в консоль if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader)) { // Получение объекта ридера var card = manager[ActiveCardReader]; // Создание объекта для работы с картой полиса ОМС var policy = new PolicySmartcardBase(card); // Подключение к карте полиса ОМС policy.Connect(); // Чтение информации о карте полиса ОМС ( Идентификационные данные ) var cid = policy.GetCardID(); // Чтение информации о карте полиса ОМС ( Информация о микросхеме от производителя ) var ccd = policy.GetICCD(); CardInfoStrings cardInfo = null; if (cid != null) { cardInfo = new CardInfoStrings { CardHexNum = cid.SerialNumber.ToHexString(), CardType = cid.CardType, Vers = cid.CardVersion, InstitId = cid.InstitutionID.ToHexString(), AddInfo = cid.AdditionalInfo.ToHexString() }; } if (ccd != null) { cardInfo = cardInfo ?? new CardInfoStrings(); cardInfo.IssuerCode = ccd.IssuerCode; cardInfo.IssuerData = ccd.IssuerData.ToHexString(); } // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(cardInfo); } manager.ReleaseContext(); return(null); }
/// <summary> /// Инициализация карты /// </summary> public bool InitializeCard(PCSCReadersManager cardManager, PolicySmartcardBase policy) { bool flag; try { ISCard card = cardManager[cardManager.OfType <ISCard>().ToList().First().ReaderName]; policy = new PolicySmartcardBase(card); policy.Connect(); flag = true; } catch (Exception ex) { flag = false; throw ex; } return(flag); }
/// <summary> /// Инициализация считывателя карт /// </summary> public bool InitializeReader(PCSCReadersManager cardManager) { bool flag = false; try { cardManager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); if (cardManager.ReadersCount > 0) { flag = true; } } catch (Exception ex) { throw ex; } return(flag); }
private Task ReadInfo() { while (true) { System.Threading.Thread.Sleep(1000); PCSCReadersManager CardManager = new PCSCReadersManager(); PolicySmartcardBase policy = null; try { if (!_policyService.InitializeReader(ref CardManager)) { continue; } else if (!_policyService.InitializeCard(ref CardManager, ref policy)) { continue; } else { StatusLabel = CardManager.OfType <ISCard>().ToList().First().ReaderName; if (!_isCardInserted) { Information = _policyService.ReadInformation(ref policy); _isCardInserted = true; } policy.Disconnect(); } } catch (Exception ex) { Information = _emptyInfoModel; StatusLabel = ex.Message.ToString(); _isCardInserted = false; } } }
public List <SmoInfoStrings> GetSmoHistory() { const string pinCard = "5473"; // Чтение информации о владельце карты полиса ОМС var manager = new PCSCReadersManager(); try { // Установление соединения с смарт-карт API manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); // Вывод списка ридеров в консоль if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader) == false) { ////printf("Устройство чтения смарт-карт с именем [{0}] не найдено в системе."); manager.ReleaseContext(); return(null); } if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveToken) == false) { ////printf("Устройство чтения смарт-карт с именем [{0}] не найдено в системе."); manager.ReleaseContext(); return(null); } // Получение объекта ридера var policyCard = manager[ActiveCardReader]; var tokenCard = manager[ActiveToken]; // Создание объекта для работы с картой полиса ОМС var policy = new PolicySmartcard(policyCard, tokenCard); // Подключение к карте полиса ОМС policy.Connect(); // Аутентификация с картой модуля безопасности policy.Authentificate_External(pinCard); policy.Authentificate_External(pinCard, true); // Чтение истории СМО var historyList = policy.GetSMOHistory(); var histSmos = new List <SmoInfoStrings>(); historyList.ForEach(smo => { if (smo != null) { var smoInfo = new SmoInfoStrings { OgrnSmo = smo.OGRN, Okato = smo.OKATO, InsuranceStartDate = FormatPolicyDate( smo.InsuranceStartDate, "Отсутствует"), InsuranceEndDate = FormatPolicyDate( smo.InsuranceExpireDate, "Не ограничено"), Eds = smo.EDS == null ? null : new Eds { Certificate = new X509Certificate2(smo.EDS.Certificate).Subject, Ecp = smo.EDS.Signature.ToHexString() } }; histSmos.Add(smoInfo); } }); // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(histSmos); } catch { return(null); } }
public bool ChangeSmo(string ogrnSmo, string okatoSmo, string dateFrom, string dateTo, string securityModulePin, string cardPin) { // Чтение информации о владельце карты полиса ОМС var manager = new PCSCReadersManager(); try { // Установление соединения с смарт-карт API manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); // Вывод списка ридеров в консоль if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader) == false) { manager.ReleaseContext(); return(false); } if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveToken) == false) { manager.ReleaseContext(); return(false); } // Получение объекта ридера var policyCard = manager[ActiveCardReader]; var tokenCard = manager[ActiveToken]; // Создание объекта для работы с картой полиса ОМС var policy = new PolicySmartcard(policyCard, tokenCard); // Подключение к карте полиса ОМС policy.Connect(); // Аутентификация с картой модуля безопасности // Пин-код модуля безопасности 12345678 policy.Authentificate_Mutual(securityModulePin, true); var verifyArgs = new VerifyPINArguments { // Данный параметр устанавливает признак использования пин-пада для // предъявления пин-кода с помощью выносной клавиатуры. В случае установки данного параметра в значение false // требуется заполнение параметра 'PinValue' // Использование пин-пада возможно только в случае, если карта полиса ОМС установлена // в устройство с поддержкой функции выносной клавиатуры. // Проверить наличие функций выносной клавиатуры у устройства можно с помощью метода // 'PolicyPinpad.IsDeviceSupported(policy_card, false // Не выполнять подключение к карте если подключение было выполнено внешними средствами UsePinpad = PolicyPinpad.IsDeviceSupported(policyCard, false), // Значение пин-кода. Данный параметр используется только если UsePinpad = false PinValue = "1234", // Ссылка на метод для отмены ввода пин-кода программным способом в случае использовании выносной клавиатуры // Инициализация происходит на стороне метода VerifyPIN CancelHandler = null, // Ссылка на метод для обработки события нажатия кнопок на выносной клавиатуре // Можно не инициализировать - используется только в случае использовании выносной клавиатуры EnteredDigitHandler = key => { // Тело метода, обработчика } }; // Проверка пина policy.VerifyPIN(ref verifyArgs); // Парсим даты DateTime dtFrom = DateTime.Now; DateTime.TryParse(dateFrom, out dtFrom); // Парсим даты DateTime dtTo = DateTime.Now.AddYears(5); DateTime.TryParse(dateTo, out dtTo); // Создание объекта нового СМО var smo = new SMOInformation { OGRN = ogrnSmo, OKATO = okatoSmo, InsuranceStartDate = dtFrom, InsuranceExpireDate = dtTo, EDS = null /*ЭЦП будет инициализирована позже после ее создания*/ }; // [Формирование ЭЦП нового СМО] // Открытие хранилища сертификатов текущего пользователя var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); // Выбор сертификата с помощью строенного диалога var selected = X509Certificate2UI.SelectFromCollection( store.Certificates, "Сертификата", "Выберите сертификат для формирования ЭЦП СМО", X509SelectionFlag.SingleSelection); if (selected.Count > 0) { // Создание объекта формирования подписи var signatureEncoder = new SignatureEncoder(selected[0]); // Формирование ЭЦП smo.EDS = new SMOInformationEDS { Signature = signatureEncoder.CreateSignHash(smo.EncodeBER()), // Преобразование объекта к формату BER-TLV Certificate = selected[0].Export(X509ContentType.Cert) }; } // Запись информации о новом СМО на карту полиса ОМС policy.CreateNewSMO(smo); // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(true); } catch { return(false); } }
public OwnerInfo GetOwnerInfo() { // Чтение информации о владельце карты полиса ОМС var manager = new PCSCReadersManager(); try { // Установление соединения с смарт-карт API manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); // Вывод списка ридеров в консоль if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader)) { // Получение объекта ридера var card = manager[ActiveCardReader]; // Создание объекта для работы с картой полиса ОМС var policy = new PolicySmartcardBase(card); // Подключение к карте полиса ОМС policy.Connect(); // Чтение информации о владельце полиса ОМС var ownerInfoCard = policy.GetOwnerInformation(); if (ownerInfoCard != null) { var ownerInfo = new OwnerInfo { LastName = FormatPolicyText(ownerInfoCard.Identity_1, string.Empty), FirstName = FormatPolicyText(ownerInfoCard.Identity_2, string.Empty), MiddleName = FormatPolicyText(ownerInfoCard.Identity_3, string.Empty), Sex = ownerInfoCard.Sex == 1 ? "273" : ownerInfoCard.Sex == 2 ? "274" : string.Empty, Birthday = FormatPolicyDate(ownerInfoCard.BirthDate, string.Empty), BirthPlace = FormatPolicyText(ownerInfoCard.BirthPlace, string.Empty) }; if (ownerInfoCard.Citizenship != null) { ownerInfo.CitizenschipCode = FormatPolicyText(ownerInfoCard.Citizenship.CoutryCode, string.Empty); ownerInfo.CitizenschipName = FormatPolicyText(ownerInfoCard.Citizenship.CoutryCyrillicName, string.Empty); } ownerInfo.PolisNumber = ownerInfoCard.PolicyNumber; ownerInfo.PolisDateFrom = FormatPolicyDate(ownerInfoCard.IssueDate, string.Empty); ownerInfo.PolisDateTo = FormatPolicyDate(ownerInfoCard.ExpireDate, string.Empty); ownerInfo.Snils = FormatPolicyText(ownerInfoCard.SNILS, string.Empty); try { // Чтение атрибутов безопасности карты полиса ОМС var sod = policy.GetSecurityInformation(); ownerInfo.StateEcp = ownerInfoCard.VerifyEDS(sod) ? "Верна" : "Неверна"; } catch { } // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(ownerInfo); } // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(null); } manager.ReleaseContext(); return(null); } catch { manager.ReleaseContext(); throw; } }
public SmoInfoStrings GetCurrentSmo() { // Чтение информации о владельце карты полиса ОМС var manager = new PCSCReadersManager(); // Установление соединения с смарт-карт API manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); // Вывод списка ридеров в консоль if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader)) { // Получение объекта ридера var card = manager[ActiveCardReader]; // Создание объекта для работы с картой полиса ОМС var policy = new PolicySmartcardBase(card); // Подключение к карте полиса ОМС policy.Connect(); // Чтение информации о владельце полиса ОМС var smo = policy.GetCurrentSMOInformation(); if (smo != null) { var smoInfo = new SmoInfoStrings { OgrnSmo = smo.OGRN, Okato = smo.OKATO, InsuranceStartDate = FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует"), InsuranceEndDate = FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено") }; if (smo.EDS != null) { smoInfo.Eds = new Eds { Certificate = new X509Certificate2(smo.EDS.Certificate).Subject, Ecp = smo.EDS.Signature.ToHexString() }; try { smoInfo.Eds.StateEcp = smo.VerifyEDS() ? "Верна" : "Неверна"; } catch { } } policy.Disconnect(); manager.ReleaseContext(); return(smoInfo); } // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(null); } manager.ReleaseContext(); return(null); }
void GetCardData() { if (ReadersComboBox.Items.Count == 0) { MessageBox.Show("Не обнаружено подключенных ридеров!"); return; } ClearForm(); PCSCReadersManager manager = new PCSCReadersManager(); var SA = ReadersComboBox.Items[0].ToString(); manager.EstablishContext(SmartCard.PCSC.READERSCONTEXTSCOPE.SCOPE_USER); if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(SA)) { ISCard card = manager[SA]; PolicySmartcardBase policy = new PolicySmartcardBase(card); policy.Connect(); try { OwnerInformation owner_info = policy.GetOwnerInformation(); if (owner_info != null) { textBoxFIO.Text = FormatPolicyText(owner_info.Identity_1, "") + " " + FormatPolicyText(owner_info.Identity_2, "") + " " + FormatPolicyText(owner_info.Identity_1, ""); textBoxSex.Text = owner_info.Sex == 1 ? "Мужской" : owner_info.Sex == 2 ? "Женский" : "Неизвестно"; textBoxDateOfBirth.Text = FormatPolicyDate(owner_info.BirthDate, "Отсутствует"); textBoxPlaceOfBirth.Text = FormatPolicyText(owner_info.BirthPlace, "Отсутствует"); if (owner_info.Citizenship != null) { textBoxCountryCode.Text = FormatPolicyText(owner_info.Citizenship.CoutryCode, "Отсутствует"); textBoxCountryName.Text = FormatPolicyText(owner_info.Citizenship.CoutryCyrillicName, "Отсутствует"); } textBoxPolisNumber.Text = owner_info.PolicyNumber; textBoxPolisDate.Text = FormatPolicyDate(owner_info.ExpireDate, "Отсутствует"); textBoxPolisExpire.Text = FormatPolicyDate(owner_info.ExpireDate, "Не ограничено"); textBoxSNILS.Text = FormatPolicyText(owner_info.SNILS, "Отсутствует"); } } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка: "); } try { CardID cid = policy.GetCardID(); if (cid != null) { textBoxCardSerial.Text = cid.SerialNumber.ToHexString(); textBoxCardType.Text = cid.CardType.ToString(); textBoxCardVersion.Text = cid.CardVersion.ToString(); textBoxCompanyID.Text = cid.InstitutionID.ToHexString(); textBoxInformation.Text = cid.AdditionalInfo.ToHexString(); } } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка: "); } try { ICCID ccd = policy.GetICCD(); if (ccd != null) { textBoxManufacturerCode.Text = ccd.IssuerCode.ToString(); textBoxManufacturerData.Text = ccd.IssuerData.ToHexString(); } } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка: "); } try { SMOInformation smo = policy.GetCurrentSMOInformation(); if (smo != null) { textBoxOGRN.Text = smo.OGRN; textBoxOKATO.Text = smo.OKATO; textBoxInsuranceStartDate.Text = FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует"); textBoxExpire.Text = FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено"); textBoxCert.Text = new X509Certificate2(smo.EDS.Certificate).Subject; textBoxECP.Text = smo.EDS.Signature.ToHexString(); //textBoxECPStatus.Text = smo.VerifyEDS() == true ? "Верна" : "Неверна"; } } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка: "); } policy.Disconnect(); } manager.ReleaseContext(); }
public static void GetData(string args = "") { PCSCReadersManager manager = new PCSCReadersManager(); try { manager.EstablishContext(SmartCard.PCSC.READERSCONTEXTSCOPE.SCOPE_USER); if (args != "") { ReaderName = args; } else { var list = manager.OfType <ISCard>().ToList(); if (list.Count > 0) { ReaderName = list[0].ReaderName; } else { ContentFile += "Не найдены ридеры!"; } } if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ReaderName)) { //Получение объекта ридера ISCard card = manager[ReaderName]; //Создание объекта для работы с картой полиса ОМС PolicySmartcardBase policy = new PolicySmartcardBase(card); //Подключение к карте полиса ОМС policy.Connect(); //Чтение информации о владельце полиса ОМС OwnerInformation owner_info = policy.GetOwnerInformation(); if (owner_info != null) { printf("Информация о владельце:"); printf("{0} = {1}", "Фамилия".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_1, "Отсутствует")); printf("{0} = {1}", "Имя".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_2, "Отсутствует")); printf("{0} = {1}", "Отчество".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_3, "Отсутствует")); printf("{0} = {1}", "Пол".PadRight(35, ' '), owner_info.Sex == 1 ? "Мужской" : owner_info.Sex == 2 ? "Женский" : "Неизвестно"); printf("{0} = {1}", "Дата рождения".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.BirthDate, "Отсутствует")); printf("{0} = {1}", "Место рождения".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.BirthPlace, "Отсутствует")); if (owner_info.Citizenship != null) { printf("Гражданство:"); printf("{0} = {1}", "Код страны".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Citizenship.CoutryCode, "Отсутствует")); printf("{0} = {1}", "Кириллическое название".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Citizenship.CoutryCyrillicName, "Отсутствует")); } else { printf("{0} = {1}", "Гражданство".PadRight(35, ' '), "Отсутствует"); } printf("Информация о полисе:"); printf("{0} = {1:D16}", "Номер полиса".PadRight(35, ' '), owner_info.PolicyNumber); printf("{0} = {1}", "Дата выпуска".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.ExpireDate, "Отсутствует")); printf("{0} = {1}", "Срок действия".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.ExpireDate, "Не ограничено")); printf("{0} = {1}", "СНИЛС".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.SNILS, "Отсутствует")); //printf("Чтение атрибутов безопасности карты полиса ОМС"); //SecurityInformation SOD = policy.GetSecurityInformation(); //printf("{0} = {1}", "Статус ЭЦП".PadRight(35, ' '), owner_info.VerifyEDS(SOD) ? "Верна" : "Неверна"); } else { printf("Данные о владельце отсутствуют на карте!"); } SMOInformation smo = policy.GetCurrentSMOInformation(); if (smo != null) { printf("Данные страхового приложения:"); printf("{0} = {1}", "ОГРН".PadRight(35, ' '), smo.OGRN); printf("{0} = {1}", "ОКАТО".PadRight(35, ' '), smo.OKATO); printf("{0} = {1}", "Дата начала страхования".PadRight(35, ' '), MainForm.FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует")); printf("{0} = {1}", "Окончание срока действия".PadRight(35, ' '), MainForm.FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено")); if (smo.EDS != null) { printf("Данные ЭЦП"); printf("{0} = {1}", "Сертификат".PadRight(35, ' '), new X509Certificate2(smo.EDS.Certificate).Subject); printf("{0} = {1}", "ЭЦП".PadRight(35, ' '), smo.EDS.Signature.ToHexString()); //printf("{0} = {1}", "Статус ЭЦП".PadRight(35, ' '), smo.VerifyEDS() == true ? "Верна" : "Неверна"); } else { printf("{0} = {1}", "Данные ЭЦП".PadRight(35, ' '), "Отсутствуют"); } } else { printf("Данные о смо отсутствуют на карте!"); } CardID cid = policy.GetCardID(); ICCID ccd = policy.GetICCD(); if (cid != null) { printf("Идентификационные данные карты:"); printf("{0} = {1}", "Серийный номер карты".PadRight(35, ' '), cid.SerialNumber.ToHexString()); printf("{0} = {1}", "Тип карты".PadRight(35, ' '), cid.CardType); printf("{0} = {1}", "Версия".PadRight(35, ' '), cid.CardVersion); printf("{0} = {1}", "Идентификатор учреждения".PadRight(35, ' '), cid.InstitutionID.ToHexString()); printf("{0} = {1}", "Дополнительные сведения о карте".PadRight(35, ' '), cid.AdditionalInfo.ToHexString()); } else { printf("Идентификационные данные отсутствуют на карте!"); } if (ccd != null) { printf("Информация о микросхеме от производителя:"); printf("{0} = {1}", "Код производителя карты".PadRight(35, ' '), ccd.IssuerCode); printf("{0} = {1}", "Данные производителя карты".PadRight(35, ' '), ccd.IssuerData.ToHexString()); } else { printf("Информация о микросхеме от производителя отсутствует на карте!"); } //Отключение от карты полиса ОМС policy.Disconnect(); //Отключение от смарт-карт API manager.ReleaseContext(); } else { printf("Устройство чтения смарт-карт с именем [{0}] не найдено в системе."); manager.ReleaseContext(); } } catch (Exception exception) { ContentFile += "Ошибка получения списка ридеров: " + exception.Message; } StreamWriter wf; wf = new StreamWriter("infofile.txt", false, Encoding.GetEncoding(1251)); wf.Write(ContentFile); wf.Close(); }