Показаны сообщения с ярлыком windows. Показать все сообщения
Показаны сообщения с ярлыком windows. Показать все сообщения

понедельник, 3 января 2022 г.

FAQ Narrator in WPF

The built-in Narrator in Windows 10 and Windows 11 is launched by the "LeftCtrl + Win + Enter" shortcut.

Links:

Complete guide to Narrator

Accessibility best practices

In the app window, the control that is in focus is voiced. Also, the Windows narrator voices every key pressed.

In Windows 7, only the specified control name is pronounced. 

Narrator is missing out of the box in Windows 7 SP1 without updates and the very first versions of Windows 10.

1. Narrator announces the type of the selected control, followed by it's name. 

The voiced name is set using the AutomationProperties.Name property. 

For example:

    AutomationProperties.Name = "Login"

For custom controls, you need to write the type yourself. Otherwise, "Custom" will be pronounced.

Example:

Create a class

    public class ToggleSwitchControlAutomationPeer : UserControlAutomationPeer {

        public ToggleSwitchControlAutomationPeer(ToggleButton owner) :

            base(owner) { }

        protected override string GetLocalizedControlTypeCore() {

            return "Toggle switch";

        }

    }

And in control itself

    protected override AutomationPeer OnCreateAutomationPeer() {

        return new ToggleSwitchControlAutomationPeer(this);

    }


2. Recommendation:

Add the app name to the main window and, if possible, to all windows of the application. 

Otherwise, there will be a faceless "MainWindow" or "Login Window".

For example:

"YourApplication MainWindow" or "BestApp Login Window"


3.

By default, the Windows narrator repeats the name of the control, so you don't need to add it to the designation.


4.

With the PasswordBox control (and some more) in the .Net Framework up to 4.7.1 trouble. There are actually three outputs:

a) Updating .Net Framework.

b) Add our own control in which we use the textbox.

c) We use a textbox with a special font (for a password, but potentially unsafe).

https://github.com/dotnet/docs/blob/main/docs/framework/whats-new/whats-new-in-accessibility.md

In .NET Framework 4.7 and earlier versions, xref:System.Windows.Controls.PasswordBox controls were announced as "no item in view" or had otherwise incorrect behavior

5.

Try to use short, clear phrases. No abbreviations, acronyms, compound words.

среда, 26 августа 2020 г.

Some tips for settings your keyboard Lenovo ThinkPad 8845CR UltraNav

 Some tips for settings your keyboard Lenovo ThinkPad 8845CR UltraNav



Tip Zero! NumLock is disabled with SHIFT! Shift + ScrLk (NumLock)


1. If your system has NumLock enabled at system boot, disable:

Windows Registry Editor Version 5.00

[HKEY_USERS\.DEFAULT\Control Panel\Keyboard]

"InitialKeyboardIndicators"="0"

(do not forget to disable it in BIOS too)


2. Since there is no Win key on the keyboard, and I actively use it, I assigned CapsLock key to WinKey

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]

"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,5c,e0,3a,00,00,00,00,00


3. To use the middle button as a wheel, I used a third party software - https://github.com/ykon/w10wheel.net


4. Adding an "acceleration" for the trackpoint https://forum.thinkpads.com/viewtopic.php?t=120571

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Mouse]

"SmoothMouseXCurve"=hex:\

00,00,00,00,00,00,00,00,\

15,6e,00,00,00,00,00,00,\

00,40,02,00,00,00,00,00,\

39,dc,05,00,00,00,00,00,\

00,00,10,00,00,00,00,00

"SmoothMouseYCurve"=hex:\

00,00,00,00,00,00,00,00,\

b8,5e,01,00,00,00,00,00,\

cd,4c,15,00,00,00,00,00,\

ff,4c,88,00,00,00,00,00,\

00,00,38,02,00,00,00,00

среда, 17 января 2018 г.

Принтер HP P1102W не печатает через RDP

Вводная: Есть терминальный сервер - Windows 2008 R2 64 bit, стандартная редакция. И клиент - Windows 7 Pro, 32 бита. На клиенте установлен принтер HP P1102W. При подключении через RDP, принтер отказывается работать. Пробрасывается, но не печатает. На самом клиенте проблем с печатью нет.

Решение:

  1. Закрыть сеанс (именно выход из системы) и открыть заново - не помогло
  2. Перезагрузить клиент и сервер - не помогло
  3. Проверил корректность драйверов и ОДИНАКОВОСТЬ версии на клиенте и на сервере. Самое простое - и там, и там удаляем и ставим заново. Для сервера ставим и 32 битную версию, и 64 - не помогло
  4. Устанавливаем политику - запускаем gpedit.msc и по пути Computer Configuration -> Administrative templates -Windows Components -> Remote Desktop Services > Remote Desktop Session Host -> Printer Redirection отключаем опцию "Use Terminal Services Easy Print Driver First" - не помогло (но было странно, ОПЦИЯ НЕ ДЕЙСТВОВАЛА - в свойствах принтера всё равно оставался Easy Print Driver)
  5. Добавил ключ реестра UseUniversalPrinterDriverFirst по пути HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services тип REG_DWORD, создал его и установил в значение "4" ("3" - включен) - помогло и всё заработало.


PS: Ещё в интернетах встречал совет поменять драйвера на XPS, но на них очень сильно начинала тормозить клиентская 1С в RDP сеансе. Но вам может быть поможет.

PS2: После каждого шага перезагружался.

среда, 20 января 2016 г.

Программная отчистка корзины Яндекс.Диск

Вводная: Когда-то давно случился у Яндекс.Диска небольшой конфуз http://habrahabr.ru/post/204580/ после которого пользователям выдали 200 Гб места. Что сделало его очень удобным для удалённого бэкапа небольших баз. Но как всегда есть одно - НО. И но это заключается в методе удаления файлов с яндекс.диска. https://yandex.ru/support/disk/desktop/faq.xml#delete Грубо говоря, при удалении файлов, они не удаляются, а переносятся в корзину, где и хранятся 30 дней. Но если у вас бэкап занимает около 10 гигабайт и вы храните 10 предыдущих копий, то уже через дней 20 весь яндекс.диск будет у вас заполнен и после чего просто ПРЕКРАТИТ СИНХРОНИЗИРОВАТЬ. При этом выкидывая попап, что место на яндекс диске закончилось - но если это сервер, то на него могут месяцами не заходить и узнать об отсутствии бэкапов слишком поздно. Так что надо корзину чистить, но стандартными средствами есть два выбора - либо через сайт, либо через правую кнопку мыши на папке яндекс.корзины. И оба способа для сервера не очень подходят.

Решение: Создаём консольный проект. У меня имя проекта - clearYandexDiskTrash

Устанавливаем через NuGet библиотеку yandexdisk.client.
Или скачиваем с сайта https://github.com/raidenyn/yandexdisk.client и устанавливаем вручную.
Библиотека требует .NetFramework версии 4.6, так что нужно чтобы в свойствах проекта была именно она.

Заодно, также в свойствах проекта, перейдём на вкладку Settings и добавим настройку с именем yandexDiskToken.

Далее код -

using System;
using System.Threading;
using clearYandexDiskTrash.Properties;

using YandexDisk.Client;
using YandexDisk.Client.Http;

namespace clearYandexDiskTrash
{
  class Program
  {
    static void Main()
    {
      try
      {
        //You should have oauth token from Yandex Passport.
        //See https://tech.yandex.ru/oauth/
        string oauthToken = Settings.Default.yandexDiskToken;

        // Create a client instance
        using (IDiskApi diskApi = new DiskHttpApi(oauthToken))
        {
           var x = diskApi.Commands.EmptyTrashAsync("", CancellationToken.None);
        }
      }
      catch(Exception ex)
      {
         Console.WriteLine("Application clearYandexDiskTrash error." + " Message: " + ex.Message);
      }
    }
  }
}

Теперь запускаем и переходим в папку с скомпилированной программой. Там должен появится файл - clearYandexDiskTrash.exe.config. Открываем его блокнотом и изменяем параметр yandexDiskToken на наш. Который мы можем получить на сайте яндекса - https://tech.yandex.ru/oauth/ (но для быстроты и если нужно написать "для себя", то проще и быстрее получить токен на https://tech.yandex.ru/disk/poligon/ )

Далее не забываем поменять настройки бэкапов, чтобы программа запускалась перед выполнением бэкапа. И проверить выполнение. И ещё раз проверить через несколько дней.

понедельник, 21 декабря 2015 г.

Использование ВК для логгирования через C#

Вводная: Поделился я в твиттере, что у меня критичные логи помимо емейла падают ещё и во вконтакт, и в личке попросили скинуть способ. Подумал, что мало ли ещё кому будет интересно. Программа по минимум использует собственные велосипеды и по максимуму готовые библиотеки.

Решение: Для начала нужна зарегистрированная страница в VK. Переходим по ссылке https://vk.com/apps?act=manage и нажимаем "Создать приложение". Название пусть будет "vkLogSend", тип "Standalone-приложение".

Придёт смс с кодом, который нужно указать. Далее переходим во вкладку "Настройки" и сохраняем куда-нибудь "ID приложения", в нашем случае 1111111.



На этом работа с сайтом закончена и можем переходить непосредственно к программированию.

Открываем Visual Studio и создаём консольный проект vkLogSend. Далее сразу можно перейти в NuGet и установить два пакета - VkNet (реализация ВКонтакте API для .NET) и NLog (библиотека логгирования для C#).

Далее создаём класс с именем "vkTarget.cs" и содержанием -

using System;

using NLog;
using NLog.Targets;

using VkNet;
using VkNet.Enums.Filters;

namespace vkLogSend
{
    [Target("vk")]
    public sealed class VKTarget : TargetWithLayout
    {
        public VKTarget() { }

        protected override void Write(LogEventInfo logEvent)
        {
            var logMessage = this.Layout.Render(logEvent);

            SendTheMessageToRemoteHost(logMessage);
        }

        [STAThread]
        private void SendTheMessageToRemoteHost(string message)
        {
            var appId = 111111; // указываем id приложения
            var email = "user@mail.com"; // email для авторизации
            var password = "Pa$$w00rd"; // пароль
            var settings = Settings.Messages; // уровень доступа к данным

            var api = new VkApi();

            api.Authorize(appId, email, password, settings); // авторизуемся

            api.Messages.Send(1111111, false, message); // посылаем сообщение пользователю
        }
    }
}

Теперь нужно создать правила для NLog, это делается через создание файла NLog.config, в нашем примере пусть будет два правила: вывод на консоль и отправка в ВК -

<?xml version="1.0" encoding="utf-8" ?>

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <extensions>
    <add assembly="vkLogSend"/>
  </extensions>

  <targets>
    <target name="console" xsi:type="Console" layout="${date:format=HH\:mm\:ss} | ${level} | ${message}" />
    <target name="vk" type="vk" layout="${date:format=HH\:mm\:ss} | ${level} | ${message}"/>
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="console" />
    <logger name="*" minlevel="Trace" writeTo="vk" />
  </rules>

</nlog>

По сути стандартный файл NLog с добавленной секцией <extensions> и прописывание правила для таргета "vk"

И напоследок использование -


using System;
using NLog;

namespace vkLogSend
{
    class Program
    {
        static Logger logger = LogManager.GetCurrentClassLogger();

        static void Main()
        {
            logger.Trace("vkLogSend test message. Error on machine: " + Environment.MachineName);
            Console.WriteLine("Press any key..."); Console.ReadKey();
        }
    }
}

И у нас ничего не работает :) В библиотеке VkNet, при установке через NuGet есть ошибка - устанавливаются библиотеки Newtonsoft.Json и HtmlAgilityPack неверных версий. Решение простое - через NuGet обновляем их до последних и всё должно заработать.

После обновления библиотек можем тестировать и отправлять себе логи через Вконтакт.

\



PS: Есть нюанс при работе - если у вас настроено подтверждение входа (через смс или другим способом), то данный код работать не будет. Имейте это в виду.

четверг, 23 апреля 2015 г.

Отложенный запуск службы

Вводная: На одном сервере есть две службы - сервер баз данных и приложение (в виде службы) которое обращается к базе данных.
Столкнулся с тем, что служба БД запускается позже, чем приложение и в итоге программа висит с ошибкой подключения (переписать приложение не вариант).

Решение: Есть два способа
1) Поставить в свойствах службы тип запуска "Автоматически (отложенный запуск)". Система запускает такие службы только после того, как запущены все службы, настроенные на автоматический запуск. Запуск отложенных служб осуществляется с самым низким приоритетом, что позволяет сэкономить ресурсы компьютера при загрузке этих служб. 
Но у этого решения есть свой минус - если есть три службы А, зависимая Б и любая сторонняя В. И нам надо сделать запуск Б, только после А. У А и В тип запуска "Автоматически", предположим, что левая служба В зависла при запуске. Тогда даже при работающей А и возможным запуском Б, Б не будет запущена, так как будет ожидать запуск службы В.

2) Более корректный способ это поставить службу приложения в зависимость от службы БД. Теперь служба будет ждать запуска именно сервера БД и сразу после него стартовать сама.
Делается это через командную строку -
sc config ИмяСлужбыПриложения depend= ИмяСлужбыБД/ все дополнительные зависимости, перечисленные через / прямой слеш

Причём после "depend=" должен быть обязательно пробел!

Посмотреть зависимости (и прочие параметры) можно

sc qc ИмяСлужбыПриложения

понедельник, 11 ноября 2013 г.

Ошибка резервного копирования на Windows Server 2008 R2

Вводная: При выполнении резервного копирования возникала ошибка, на этапе создания теневой копии тома.
"Операция архивации, начатая в 2013‎-‎11‎-‎11, завершилась с ошибкой, поскольку произошел сбой службы теневого копирования при попытке создать теневые копии архивируемых томов. Код ошибки: "2155348075". Чтобы найти причину ошибки, просмотрите описание события и повторите операцию после устранения проблемы."


Решение: На MSDN нет прямого решения данной проблемы. На одном из форумов нашел рекомендацию, что данная ошибка возникает при нехватке места, но на жёстких дисках было свободно около 60% пространства. Далее нашел, что может не хватать места именно в выделенном под теневые копии. После изменения параметра на "Не ограничен" резервные копии начали делаться корректно.


воскресенье, 3 ноября 2013 г.

Маршрутизация на Mikrotik при использовании ISA 2006 для аутентификации.

Вводная: Имеется сеть со следующей структурой

Локальная сеть подключена к микротику, в нём указан в качестве шлюза на 0.0.0.0 адрес Microsoft ISA 2006 сервер (далее ISA) 192.168.0.2. К которому подключены два провайдера (основной PPPoE и резервный на статике). Минусы данного решения в том, что 
  1. ISA очень коряво работает с несколькими внешними линиями - встроенных средств переключения нет, приходится работать скриптами, плюс при переключении между каналами требуется перезагружать сервис ISA. Что при достаточно большом количестве правил может занимать приличное время. 
  2. Привязка к серверу - в случае падения сервера, придётся бежать в серверную и перетыкать провода из него в микротик (или другой резервный сервер) и настраивать подключение в интернет через него (хотя бы чтобы у некоторых был доступ в сеть, пусть без доменной авторизации). 
  3. Достаточно сложно виртуализировать данный сервер (по крайней мере в моём случае при использовании XenServer) - либо через vlan прокидывать линки от провайдера, либо занимать сетевые разъёмы на гипервизоре и передавать их напрямую в виртуалку (теряется 2 разъёма, что не очень хорошо, лучше их агрегировать для работы с СХД). При такой схеме достаточно проблемной становится миграция между серверами и некоторые другие вещи.
  4. Получается, что ISA-сервер смотрит напрямую в интернет, что не совсем хорошо. Так как на Windows всегда гораздо больше эксплойтов и прочей гадости.

Отказываться от ISA сервера смысла нет - так как весь доступ в интернет настроен посредством доменных групп и пользователей. Да и сервер кроме выше перечисленных проблем вполне устраивает.

Задача: Перевести подключение провайдеров на микротик, чтобы получилась следующая схема. 

То есть при переходе с локальной сети на микротик, он отправляет пакеты для 0.0.0.0/0 на ISA сервер. ISA решала о возможности доступа пользователю и отправляла (или нет, если доступа у пользователя нет) обратно на микротик, где пакеты уже и уходили в интернет, по основному или в случае недоступности основного по резервному каналу.

Решение: Для начала отключаем провода от провайдера с ISA и втыкаем их в свободные порты на микротике.  Теперь в параметрах подключения к локальной сети (на ISA) прописываем два адреса - в нашем случае это будут 192.168.0.2/24 (который будет смотреть в локальную сеть) и 10.0.0.1/30 который будет смотреть на микротик. Шлюзом для данного соединения будет 10.0.0.2 (который мы пропишем на микротике). Теперь перезапускаем службу межсетевого экрана и переходим к настройке микротика.

/ip address
#Добавляем адреса для локальной сети
add address=192.168.0.1/24 interface=ether1 network=192.168.0.0
add address=10.0.0.2/30 interface=ether1 network=10.0.0.0
#Добавляем адрес для ISP2 (статический)
add address=11.22.33.44/25 interface=ether4 network=11.22.33.0

Далее сразу настроим PPPoE соединение со основным провайдером ISP1
/interface pppoe-client
add allow=chap,mschap1,mschap2 comment="ISP1 PPPoE" disabled=no interface=ether5 name=pppoe-out1 password=Pa$$worD user=pppoeuser
Обращаю ваше внимание, что отсутствует параметр "Add default Route"! - маршрут мы создадим далее вручную.

Теперь перейдём к основной части настройки - нам нужно сделать PBR (Policy-based routing).
http://www.opennet.ru/base/net/bsd_pbr_route.txt.html
В сегодняшних компьютерных сетях  высокой производительности, возникает необходимость ввыполнении пересылки пакетов соответственно определенной политике (правилу или набору правил),которая, в некотором отношении, выходит за границы традиционных принципов работы протоколов маршрутизации. PBR используется там, где, в силу различных обстоятельств, необходимо дифференцировать трафик по какому-либо признаку, и выбирать различный дальнейший маршрут длякаждого случая отдельно.
Достоинства PBR    1. выбор маршрута, основанный на источнике - позволяет пропускать трафик, приходящий из различных мест, через разные каналы подключения к Интернет    2. эффективное использование имеющихся каналов подключения к Интернет    3. расширение возможностей динамической маршрутизации

Что такое PBR?
PBR предоставляет механизм реализации пересылки (forwarding)/ маршрутизации(routing) пакетовданных, основанный на политике, представляющей собой набор правил, определенной администраторамисети. Это предоставляет более гибкий механизм для обработки пакетов на маршрутизаторах, дополняясуществующий механизм, предоставленный протоколами маршрутизации.Маршрутизаторы выбирают дальнейший путь следования пакетов данных по полю "адрес назначения", основываясь  на информациииз таблицы  статических маршрутов или полученной от динамических протоколов маршрутизации. Вместо выбора дальнейшего маршрута,основанного на адресе назначения, PBR позволяет администраторам сети определить свои правила, покоторым будет осуществляться маршрутизация пакетов.
Вначале промаркируем пакеты входящие с локальной сети, как пакеты которые надо обрабатывать таблицей LocalNetToISA, а пакеты входящие с адреса ISA-сервера, таблицей IsaToInet

/ip firewall mangle
#Добавляем маркировку пакетов для адресов входящих в микротик с локальной сети
add action=mark-routing chain=prerouting new-routing-mark=LocalNetToIsa src-address=192.168.0.0/24
#Добавляем маркировку пакетов для адресов входящих в микротик с сервера ISA
add action=mark-routing chain=prerouting new-routing-mark=IsaToInet src-address=10.0.0.1

Теперь прописываем маршруты и какой таблицей маршрутизации их требуется обрабатывать

/ip route
#Для пакетов у которых маркировка LocalNetToIsa шлюз по умолчанию будет ISA сервер
add distance=1 gateway=10.0.0.1 routing-mark=LocalNetToIsa
#Для пакетов у которых маркировка IsaToInet шлюзом будут выходы в интернет
#обратите внимание на параметр distance который отвечает за выбор основного и резервного маршрута
add distance=1 gateway=pppoe-out1 routing-mark=IsaToInet
add distance=2 gateway=11.22.33.1 routing-mark=IsaToInet

/ip route rule
add dst-address=192.168.0.0/24 table=main
add dst-address=10.0.0.1/32 table=main
add dst-address=44.55.66.30/32 table=main
add dst-address=11.22.33.0/25 table=main

Также настроим NAT для работы с ISA-сервера
/ip firewall nat
add action=masquerade chain=srcnat routing-table=IsaToInet src-address=10.0.0.1

На этом настройка закончена.

PS: http://wiki.mikrotik.com/wiki/Policy_Base_Routing - официальная вики по Policy Base Routing
http://nix.khd.ru/?p=133 - Policy based routing в Mikrotik














среда, 10 июля 2013 г.

KSC + AVP 6.0 MP4 - ошибка "Есть необработанные объекты"

Вводная: Связка Kaspersky security Center + Antivirus Kaspersky 6.0 MP4. Всё последних версий. Ошибка "Есть необработанные объекты". Причём ошибка есть, а самих объектов в консоли управления нет ("KSC - Хранилище - Файлы с отложенной обработкой")

Решение:
1. Останавливаем антивирус на клиентской машине через kaspersky security center
2. Чистим папку У КЛИЕНТА,
если ХР, \\compname\c$\Documents and Settings\All Users\Application Data\Kaspersky Lab\AVP60MP4\Report\
если 7, \\compname\c$\ProgramData\Kaspersky Lab\AVP60MP4\Report\
(для других версий антивируса путь будет отличаться)
3. Стартуем касперского
4. (опционально) Делаем полную проверку.

понедельник, 1 июля 2013 г.

Ошибка 13559 на контроллере домена

Вводная: На резервном контроллере домена в логах службы репликации появились множественные ошибки "Event ID: 13559 Source: NtFrs", с текстом "Служба репликации файлов обнаружила что путь к корню репликации изменен с "c:\windows\sysvol\domain" на "c:\windows\sysvol\domain". "

Решение: Создаём в "c:\windows\sysvol\domain" файл с именем NTFRS_CMD_FILE_MOVE_ROOT  (без расширения, пустой)

Запускаем из под администратора командную строку и рестартим службы репликации
net stop ntfrs
net start ntfrs


Дополнительные ссылки: http://eventid.net/display.asp?eventid=13559&eventno=657&source=NtFrs&phase=1
http://networkadminkb.com/KB/a473/how-to-fix-event-id-13559-the-replica-root-path-has-changed.aspx

среда, 5 июня 2013 г.

Как открыть файлы бэкапа .bkf в Windows 7

Вводная: Есть образ bkf созданный, в Windows 2003, утилитой ntbackup. Необходимо вытащить из него файлы используя Windows 7.

Решение: Есть статья посвященная данной проблеме http://support.microsoft.com/kb/974674
Но, проблема в том, что "Это обновление предназначено для указанных ниже операционных систем. Английская версия Windows 7 или Windows Server 2008 R2.". Так что если у вас русская версия, то поставить его вам не удастся - "Обновление не применимо к этому компьютеру". Можно конечно установить MUI английского языка, о чём прямо говориться в статье, но моя
редакция системы не позволяла использовать многоязычность, а переустанавливать всю систему долго)

Теперь к рабочему способу:
  • Создаем где-то отдельную папку, к примеру "ntbackup"
  • Копируем в эту папку несколько файлов из WIndows XP или Windows 2003 - ntbackup.exe, vssapi.dll, ntmsapi.dll (она находятся в папке system32)
  • Запускаем ntbackup.exe (игнорируя ошибку)
  • Выбираем файл образа и восстанавливаем нужные файлы

вторник, 16 апреля 2013 г.

STOP 0x000000ED UNMOUNTABLE_BOOT_VOLUME

Вводная: При работе компьютера был погашен свет. ИБП отсутствовал. После возвращения электричества компьютер отказывался загружаться - уходил в циклическую перезагрузку. Система Windows XP (обновления последние), файловая система - NTFS, антивирус Касперский с актуальными БД.

Решение:
Запускаем систему. Убеждаемся, что действительно не загружается ни в безопасном, ни в режиме последней удачной конфигурации. Теперь при загрузке через F8 выбираем пункт - "Отключить перезагрузку при критических ошибках". Видим синий экран с ошибкой "STOP 0x000000ED UNMOUNTABLE_BOOT_VOLUME"

Для устранения данной проблемы необходим установочный диск операционной системы. Загружаемся с него и заходим в консоль восстановления (первый пункт установки - нажимаем R). Далее последовательно вводим три команды -
fixboot
fixmbr
chkdsk c: /r
Последняя команда выполняется долго, так что нужно набраться терпения.

Также в интернете встречаются рекомендации по сбросу биоса (если проблема в настройках подключения диска) и замене шлейфа - в моём случае не потребовалось.

Статья в microsoft`е http://support.microsoft.com/kb/297185/ru

PS: Для минимизации в дальнейшем - 
1. Обязательно отключайте кеширование записи в windows.
2. ИБП с настроенным автоматическим выключением, при разряде (к примеру) до 25%

Также данная ошибка может указывать на разрушение физической целостности диска, так что рекомендация провести проверку программами MHDD или Victoria.

пятница, 29 марта 2013 г.

Ошибка резервного копирования Windows 0x800423F0


Вводная: Windows Server 2008 R2 с установленным Sharepoint 2010. При попытке запуска резервного копирования возникает ошибка 0x800423F0




Решение:
1. Откройте командную строку от имени Администратора.
2. Перейдите в папку C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN
3. Запустите PSConfig.exe -cmd upgrade -inplace b2b -force -cmd applicationcontent -install -cmd installfeatures

После этого резервное копирование начало работать.

Кому интересно описание проблемы - http://blogs.technet.com/b/sbs/archive/2011/09/16/potential-issues-after-installing-sharepoint-foundation-2010-security-update.aspx

среда, 20 февраля 2013 г.

Переименование сервера Sharepoint 2010

В продолжение Перенос БД Sharepoint 2010 http://arxont.blogspot.ru/2012/01/sharepoint-2010.html
Вводная: Есть сервер с именем SHAREPOINT. Необходимо переименовать его в SRV-SHAREPOINT.

Пуск-Все программы-Microsoft SharePoint 2010 Products-Командная консоль SharePoint 2010 (запустить от имени Администратора)

И спотыкаемся о первую ошибку "Локальная ферма недоступна. Командлеты с FeatureDependencyId не зарегистрированы" -
http://dyakovkm.blogspot.ru/2012/12/blog-post_21.html
С декабрьским пакетом обновлений установился Windows Management Framework 3.0 for Windows Server. Спасибо, конечно, но можно было бы и предупредить, что при попытке воспользоваться Командной консолью Sharepoint 2010 получим сообщение "The local farm is not accessible. Cmdlets with FeatureDependencyId are not registered." Конечно, новый PS работает под .NET 4.0, а Sharepoint – под 3.5…
Которая правда решается довольно просто http://support.microsoft.com/kb/2796733
После исправления ярлыка, запускаем консоль и

Rename-SPServer -Identity "Srv-SP-01" -Name "Srv-SP-New"

Далее - Пуск - Компьютер (свойства) - изменяем имя на нужное нам.

Перезагружаемся

пятница, 8 февраля 2013 г.

Использование XenConvert для переноса физического сервера в виртуальную среду.



Вводная: Дана задача перенести рабочий сервер (виндовый) в виртуальную среду. Выбора два - либо переустановить на новом сервере ОС-программы и заново всё настраивать (по разным причинам простое клонирование в данном случае не даст никакого результата). Либо сконвертировать существующий сервер в виртуальный.
Мы пойдём вторым путём. Ферма виртуальных серверов крутится под управлением гипервизора Citrix XenServer 6.1.

Решение: Для переноса серверов воспользуемся специальной программой XenConvert. При запуске выберем - "XenServer Virtual Hard Disk".
Почему не остальные? Вариант "XenServer" это выгрузка напрямую на сервер, а из соображений безопасности и удобства сервера вынесены в отдельную подсеть. Вариант "Open Virtualization Format (OVF) Package" - по сути та же выгрузка диска, но в не родном для XenServer формате. Третий "Provisioning Services vDisk" это вообще необходимо для доставки виртуальных ПК на базе мастер-образа, так что тоже не наш вариант.
На следующем шаге выбираем диски для импорта. Также можем сразу подкорректировать их размер

Далее выбираем путь по которому необходимо сохранить файл импорта
маленький хинт - по кнопке "Browse" вы не получите доступ по абсолютному URI (к выгрузке в сетевую папку), но если это вам необходимо, то можете подключить сетевой диск и выгрузить на него
Далее надо проверить параметры выгрузки и если всё правильно, то нажимаем "Convert" и ждём окончания. Рекомендую также на этом шаге поставить галочку "Log names of converted files" (чтобы если выгрузка глюканула, то вы знали на каком файле это произошло)


Теперь переходим непосредственно к установке образа в виртуальную среду.
  1. Запсукаем XenCenter. Выбираем сервер на котором будем разворачивать.
  2. Щелкаем на нём правой кнопкой и нажимаем "Import". Выбираем созданный на предыдущем шаге образ сервера.
  3. Следующим шагом выбираем имя, количество ядер и памяти для сервера.
  4. Выбираем пул и конкретный сервер.
  5. Выбираем сторейдж на котором будет разворачиваться образ.
  6. Подключаем сетевой адаптер.
  7. Выбираем использовать или нет "OS Fixup Settings" - данная опция позволяет сразу подключить ISO с образом ОС (к примеру если проблемы с загрузчиком и надо выполнить fixboot-fixmbr). Статья посвященная опции - http://support.citrix.com/article/CTX124961
  8. Выбираем интерфейс который будет мостом с реальной сетью
  9. Нажимаем "Finish" и ждём (Можно перейти на вкладку Logs целевого пула и смотреть на прогресс-бар :) )

пятница, 21 декабря 2012 г.

Ошибка WSUS

Вводная: при подключении к оснастке управления WSUS возникла ошибка базы данных. В логах сервера множественные ошибки типа - "Access to module dbo.spCheckForClientNameChange is blocked because the signature is not valid."



Решение: Перезапуск двух служб "Windows Internal Database" и "Update Services".

PS: В случае если данное решение не помогло, то как вариант удалить БД и создать заново. Правда придётся перекачивать все обновления.

среда, 5 октября 2011 г.

Работа в C# c POS принтером Posiflex PP-7000ii

Вводная: Есть чековый принтер Posiflex PP-7000ii, необходимо из своей программы печатать на нём.

Возможные методы решения:
  1. Посылать напрямую в COM-порт. Плюсы - простая реализация. Минусы - очень сложная работа с изображениями, форматированием, дальнейшей переносимостью программы и поиском документации на принтер
  2. Использовать драйвера АТОЛ (и некоторые другие). Плюсы - готовый драйвер, очень простая установка (по сути просто копирование dll), есть документация. Минусы - не очень большой выбор оборудования (порядка 15 моделей принтеров), платность драйвера, нет сообщества и примеров кода для C# (хотя может не нашел просто).
  3. Использовать как Windows-принтер. Плюсы - простая реализация, можно печатать что угодно (ограничиваясь разрешением принтера). Минус - очень медленная печать (до 1-2 минут на чек, что неприемлемо)
  4. Использовать библиотеку Microsoft POS for .NET. Плюсы - простая реализация, достаточно документации в англоязычном интернете (в русском не так много), отличная поддержка оборудования (всё оборудование поддерживающее стандарт UPOS, а такого большая часть), бесплатность библиотеки, быстрая скорость. Минусы - в моём случае не существенны и не были замечены, буду рад дополнениям.
В этой статье я хочу рассмотреть работу с библиотекой Microsoft POS for .NET для печати на POS-принтерах.

вторник, 6 сентября 2011 г.

Доступ по RDP к ISA серверу


Вводная: есть чистый сервер Windows 2003R2. На него был установлен ISA сервер. После установки не работает RDP подключение к компьютеру, даже при наличии правила, для локальной сети, разрешено всё для всех.

Пуск - Администрирование - Настройка служб терминалов

Переходим на раздел "Подключения", вызываем свойства "RDP-Tcp", и на вкладке "Сетевой адаптер" выбираем адаптер локальной сети. Если выбрано "Все сетевые адаптеры" ТО RDP РАБОТАТЬ НЕ БУДЕТ!!!

понедельник, 29 августа 2011 г.

Хранение настроек в XML, в C#.

Иногда требуется сохранять настройки программы не через стандартные средства C# (Properties.Settings). Это может быть связанно с разными причинами, но чаще всего для того, чтобы программа была переносима, так как стандартный механизм пишет настройки в каталоги пользователя. И если к примеру надо распространить по всему домену, то надо будет либо делать настройки дефолтными (что нельзя сделать, если к примеру на этапе разработки не развёрнут сервер и мы заранее не знаем какой у него будет адрес), либо прописывать каждому пользователю (что тоже не совсем верно). Для этого можно воспользоваться следующим подходом -

воскресенье, 14 августа 2011 г.

Получение MAC адрес в C#

Как ни странно, но в C# нет функции для определения MAC адреса удалённой машины (но определение локального МАС адреса есть). Но тем не менее решается достаточно просто -
        private void button1_Click(object sender, EventArgs e)
        {
            labelIP.Text = DoGetHostAddresses(txtbHostName.Text).ToString();
 
            labelMAC.Text = ConvertIpToMAC(DoGetHostAddresses(txtbHostName.Text));            
        }
 
        #region Get IP
        public static IPAddress DoGetHostAddresses(string hostname)
        {
            IPAddress[] ips;
            ips = Dns.GetHostAddresses(hostname);            
            
            return ips[0];
        }
        #endregion
 
        #region Get MAC
        [DllImport("iphlpapi.dll", ExactSpelling = true)]
        public static extern int SendARP(int DestIP, int SrcIP, [Outbyte[] pMacAddr, ref int PhyAddrLen);
 
        public static string ConvertIpToMAC(IPAddress ip)
        {
            byte[] ab = new byte[6];
            int len = ab.Length;
            int r = SendARP(ip.GetHashCode(), 0, ab, ref len);
            return BitConverter.ToString(ab, 0, 6);
        }
        #endregion