Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ошибка при вызове функции win32 api

Ошибка при вызове функции win32 api

Как мы уже говорили ранее, не бывает программ без ошибок. Если ошибка возникает при выполнении кода процедур и функций VBA, — ошибка периода выполнения (run time error), — то появляется окно сообщения об ошибке. Если ошибка периода выполнения появляется при работе функции Win32 API, то прерывания работы программы не происходит, окно сообщения об ошибке не появляется. Вместо этого функция возвращает значение 0 в качестве результата, свидетельствующее об ошибке периода выполнения. Тем не менее, большинство функций Win32 API сохраняют информацию о возникшей ошибке. Эту информацию можно получить стандартным способом, используя VBA объект Err . Свойство LastDLLErr этого объекта возвращает номер последней ошибки, возникшей в DLL . К сожалению, сам по себе номер мало что говорит. Необходимо знать описание ошибки, соответствующее этому номеру. Частично причину ошибки можно понять по имени константы, которую можно найти в уже неоднократно упоминавшемся файле Win32API.txt, используемом в API Viewer. Опять-таки, к сожалению, возможные значения констант приводятся независимо от функций, в которых они возникают. И, несмотря на то, что все такие константы начинаются со слова ERROR найти константу по ее значению не так то просто. Можно, конечно, воспользоваться возможностью создания базы данных по текстовому файлу и организовать специальный запрос, позволяющий найти имя константы по ее значению. Естественно, что лучше всего иметь полную информацию об используемых функциях Win32 API, включающую, в том числе, и сведения о возможных ошибках периода выполнения данных функций. Эту информацию можно найти, если под рукой есть подходящая литература, например, справочник программиста Win32, или поискать на упоминавшемся сервере Microsoft для разработчиков.

Естественно, что пример ошибки времени выполнения в процессе работы DLL у нас уже под рукой. Нам и изобретать его не было необходимости. Как Вы помните, в последнем примере мы сетовали на возникновение подобной ошибки в процессе поиска описателя окна по его заголовку при вызове функции FindWindowW , работающей в Unicode кодировке. Давайте вернемся к этому примеру и попробуем обработать эту ошибку. В раздел объявлений ранее созданного модуля Unicode мы добавили объявление констант и функций и теперь он выглядит так:

Приведем теперь процедуру, в которой вызывается функция FindWindowW , приводящая к ошибке периода выполнения:

Приведем результаты печати , появившиеся в окне отладки при выполнении этой процедуры:

Прокомментируем теперь работу программы и полученные результаты:

  • Вначале мы попытались найти окно с заведомо существующим заголовком, — окно документа, содержащего тестовые примеры. В процессе работы функции Win32 API FindWindowW возникла ошибка периода выполнения, функция вернула нулевой результат. Ошибка была обработана, и как показывает константа ERROR_INVALID_NAME , причиной является ошибка в задании имени (передаваемый формат в виде массива байтов не годится для цели поиска и сравнения строк), о чем свидетельствует отладочная информация.
  • Далее проводится еще один эксперимент на ту же тему. Для активного окна находится заголовок, используя функцию GetWindowTextW , возвращающую строку в виде массива байтов. Тут же этот массив используется для поиска окна по заголовку. Однако ничего не помогает и снова при поиске окна возникает ошибка. Она обрабатывается, о чем выдается соответствующее сообщение.

Функции API и вызов Callback функций

Мы уже говорили о функциях обратного вызова, называемых Callback функциями. Для «многослойного» способа построения программных систем, характерного для программирования, функции внешнего слоя могут вызывать функции ядра без особых проблем. Однако паритета между ядром и внешним слоем нет. Вызов функций внешнего слоя из ядра затруднен. Чтобы как-то решить эту проблему и вводятся функции обратного вызова. Если функции ядра, в ответ на ее вызов из внешнего слоя, в свою очередь необходимо вызвать функцию внешнего слоя, то ядро диктует условия, каким должна удовлетворять вызываемая функция. Есть специальные механизмы, обеспечивающие вызов таких Callback функций, но во всех случаях заголовок вызываемой функции жестко фиксирован и известен ядру. Этот механизм Callback функций применяется и для обеспечения двусторонней связи между функциями VBA и функциями Win32 API, которым в процессе их работы требуется обратный вызов функций VBA.

Заметьте, в предыдущих версиях VBA не было возможности явным образом работать с функциями Win32 API, требующими вызова Callback функций. Теперь такая возможность появилась, благодаря включению в язык возможности передачи указателя функции в качестве параметра процедур и функций. Явное введение в язык конструкции AddressOf , возвращающей указатель на функцию, дало возможность при вызове функции Win32 API передать ей в качестве аргумента имя Callback функции. Попробуем разобраться в деталях того, как вызываются функции Win32 API, требующие Callback функции для своей работы, как пишутся такие функции на VBA, как передается информация между функциями, — как это все, в конечном итоге, согласуется между собой. Начнем, прежде всего, с ответа на вопрос, а как узнать, что функция Win32 API требует для своей работы вызова Callback функции. Подсказку можно получить от обозревателя, если проанализировать оператор Declare , созданный API Viewer. Когда имя параметра начинается префиксом lp, а заканчивается окончанием Func , это означает, что соответствующий аргумент является ссылкой на имя Callback функции. К сожалению, обозреватель не содержит необходимой информации о том, каким должен быть заголовок функции обратного вызова, так что необходимо обращаться к документации по Win32 API или идти на сервер. Заметьте, документация, как правило, ориентирована на C программистов, поэтому необходимо самому корректно транслировать заголовок к виду, понимаемому VBA. Ошибки в задании типов аргументов, пропуск описателя ByVal могут дорого стоить. Пожалуй, одна из наиболее сложных задач при работе с Callback функцией состоит в том, чтобы найти ее описание, а затем, используя документацию, ориентированную на язык C/C++, корректно описать на VBA заголовок этой функции.

Еще одна, важная для понимания задача состоит в организации правильного обмена информацией между процедурой VBA, вызываемой ею функцией Win32 API и вызываемой ею Callback функцией. Прежде всего, следует понимать, что программисту никогда не приходится вызывать самому Callback функцию. Ее всегда вызывает соответствующая функция Win32 API. Она же передает ей текущие значения аргументов, необходимые для работы функции обратного вызова. Но, конечно же, в большинстве случаев Callback функция производит изменения в мире объектов VBA программы и, следовательно, она должна быть каким-то образом связана с этим миром. Иногда это делается за счет того, что в функции Win32 API предусмотрен специальный параметр, который вызывающая ее программа передает ей, а она, в свою очередь, передает его функции обратного вызова. Недостаток такого способа состоит в том, что передаваемый параметр один, а информация, связывающая функцию обратного вызова с миром VBA, может быть разнородной. В этих условиях более предпочтительным может быть способ передачи и получения данных в Callback функцию через глобальные переменные. Именно этот способ мы использовали в наших примерах. Прежде, чем перейти к примерам, давайте подведем итоги и еще раз сформулируем основные этапы организации работы при вызове функций Win32 API, требующих Callback функций. Итак, необходимо:

  1. Определить, что функция Win32 API требует вызова Callback функции.
  2. Найти документацию по этой функции, описывающую требования к заголовку этой функции. Если эта документация ориентирована на язык C/C++, то привести ее к виду, требуемому VBA.
  3. Понять, как передать информацию об объектах VBA в Callback функцию.
  4. Написать одну или несколько реализаций функций обратного вызова. Обращаем внимание, что функций обратного вызова может быть несколько. Имя функции не является жестко зафиксированным. Оно передается функции Win32 API как аргумент в момент вызова. Поэтому в зависимости от контекста одну и ту же функцию Win32 API можно вызывать с различными Callback функциями.
  5. Вызвать функцию Win32 API, передав ей в момент вызова имя Callback функции и другие необходимые аргументы.
Читать еще:  Поиск ошибок в ворде

WinApi

Обработка ошибок, возникающих при вызове функций Win32 API

Как мы уже говорили ранее, не бывает программ без ошибок. Если ошибка возникает при выполнении кода процедур и функций VBA, — ошибка периода выполнения (run time error), — то появляется окно сообщения об ошибке. Если ошибка периода выполнения появляется при работе функции Win32 API, то прерывания работы программы не происходит, окно сообщения об ошибке не появляется. Вместо этого функция возвращает значение 0 в качестве результата, свидетельствующее об ошибке периода выполнения. Тем не менее, большинство функций Win32 API сохраняют информацию о возникшей ошибке. Эту информацию можно получить стандартным способом, используя VBA объект Err . Свойство LastDLLErr этого объекта возвращает номер последней ошибки, возникшей в DLL . К сожалению, сам по себе номер мало что говорит. Необходимо знать описание ошибки, соответствующее этому номеру. Частично причину ошибки можно понять по имени константы, которую можно найти в уже неоднократно упоминавшемся файле Win32API.txt, используемом в API Viewer. Опять-таки, к сожалению, возможные значения констант приводятся независимо от функций, в которых они возникают. И, несмотря на то, что все такие константы начинаются со слова ERROR найти константу по ее значению не так то просто. Можно, конечно, воспользоваться возможностью создания базы данных по текстовому файлу и организовать специальный запрос, позволяющий найти имя константы по ее значению. Естественно, что лучше всего иметь полную информацию об используемых функциях Win32 API, включающую, в том числе, и сведения о возможных ошибках периода выполнения данных функций. Эту информацию можно найти, если под рукой есть подходящая литература, например, справочник программиста Win32, или поискать на упоминавшемся сервере Microsoft для разработчиков.

Естественно, что пример ошибки времени выполнения в процессе работы DLL у нас уже под рукой. Нам и изобретать его не было необходимости. Как Вы помните, в последнем примере мы сетовали на возникновение подобной ошибки в процессе поиска описателя окна по его заголовку при вызове функции FindWindowW , работающей в Unicode кодировке. Давайте вернемся к этому примеру и попробуем обработать эту ошибку. В раздел объявлений ранее созданного модуля Unicode мы добавили объявление констант и функций и теперь он выглядит так:

Приведем теперь процедуру, в которой вызывается функция FindWindowW , приводящая к ошибке периода выполнения:

Приведем результаты печати , появившиеся в окне отладки при выполнении этой процедуры:

Прокомментируем теперь работу программы и полученные результаты:

  • Вначале мы попытались найти окно с заведомо существующим заголовком, — окно документа, содержащего тестовые примеры. В процессе работы функции Win32 API FindWindowW возникла ошибка периода выполнения, функция вернула нулевой результат. Ошибка была обработана, и как показывает константа ERROR_INVALID_NAME , причиной является ошибка в задании имени (передаваемый формат в виде массива байтов не годится для цели поиска и сравнения строк), о чем свидетельствует отладочная информация.
  • Далее проводится еще один эксперимент на ту же тему. Для активного окна находится заголовок, используя функцию GetWindowTextW , возвращающую строку в виде массива байтов. Тут же этот массив используется для поиска окна по заголовку. Однако ничего не помогает и снова при поиске окна возникает ошибка. Она обрабатывается, о чем выдается соответствующее сообщение.

Функции API и вызов Callback функций

Мы уже говорили о функциях обратного вызова, называемых Callback функциями. Для «многослойного» способа построения программных систем, характерного для программирования, функции внешнего слоя могут вызывать функции ядра без особых проблем. Однако паритета между ядром и внешним слоем нет. Вызов функций внешнего слоя из ядра затруднен. Чтобы как-то решить эту проблему и вводятся функции обратного вызова . Если функции ядра, в ответ на ее вызов из внешнего слоя, в свою очередь необходимо вызвать функцию внешнего слоя, то ядро диктует условия, каким должна удовлетворять вызываемая функция. Есть специальные механизмы, обеспечивающие вызов таких Callback функций, но во всех случаях заголовок вызываемой функции жестко фиксирован и известен ядру. Этот механизм Callback функций применяется и для обеспечения двусторонней связи между функциями VBA и функциями Win32 API, которым в процессе их работы требуется обратный вызов функций VBA.

Читать еще:  Ошибка резервного копирования

Заметьте, в предыдущих версиях VBA не было возможности явным образом работать с функциями Win32 API, требующими вызова Callback функций. Теперь такая возможность появилась, благодаря включению в язык возможности передачи указателя функции в качестве параметра процедур и функций. Явное введение в язык конструкции AddressOf , возвращающей указатель на функцию, дало возможность при вызове функции Win32 API передать ей в качестве аргумента имя Callback функции. Попробуем разобраться в деталях того, как вызываются функции Win32 API, требующие Callback функции для своей работы, как пишутся такие функции на VBA, как передается информация между функциями, — как это все, в конечном итоге, согласуется между собой. Начнем, прежде всего, с ответа на вопрос, а как узнать, что функция Win32 API требует для своей работы вызова Callback функции. Подсказку можно получить от обозревателя, если проанализировать оператор Declare , созданный API Viewer. Когда имя параметра начинается префиксом lp, а заканчивается окончанием Func , это означает, что соответствующий аргумент является ссылкой на имя Callback функции. К сожалению, обозреватель не содержит необходимой информации о том, каким должен быть заголовок функции обратного вызова , так что необходимо обращаться к документации по Win32 API или идти на сервер. Заметьте, документация, как правило, ориентирована на C программистов, поэтому необходимо самому корректно транслировать заголовок к виду, понимаемому VBA. Ошибки в задании типов аргументов, пропуск описателя ByVal могут дорого стоить. Пожалуй, одна из наиболее сложных задач при работе с Callback функцией состоит в том, чтобы найти ее описание, а затем, используя документацию, ориентированную на язык C/C++, корректно описать на VBA заголовок этой функции.

Еще одна, важная для понимания задача состоит в организации правильного обмена информацией между процедурой VBA, вызываемой ею функцией Win32 API и вызываемой ею Callback функцией. Прежде всего, следует понимать, что программисту никогда не приходится вызывать самому Callback функцию. Ее всегда вызывает соответствующая функция Win32 API. Она же передает ей текущие значения аргументов, необходимые для работы функции обратного вызова . Но, конечно же, в большинстве случаев Callback функция производит изменения в мире объектов VBA программы и, следовательно, она должна быть каким-то образом связана с этим миром. Иногда это делается за счет того, что в функции Win32 API предусмотрен специальный параметр, который вызывающая ее программа передает ей, а она, в свою очередь, передает его функции обратного вызова . Недостаток такого способа состоит в том, что передаваемый параметр один, а информация, связывающая функцию обратного вызова с миром VBA, может быть разнородной. В этих условиях более предпочтительным может быть способ передачи и получения данных в Callback функцию через глобальные переменные. Именно этот способ мы использовали в наших примерах. Прежде, чем перейти к примерам, давайте подведем итоги и еще раз сформулируем основные этапы организации работы при вызове функций Win32 API, требующих Callback функций. Итак, необходимо:

Устраняем проблемы с ЭЦП ФСЗН

В связи с прекращением работы старой версии портала ФСЗН с 1.10.2019 года информация в данной статье уже не актуальна, хотя приведенные в ней советы по-прежнему могут оказаться полезными. В блоге есть свежая статья с советами по работе с новой версией портала.

В этой заметке будет приведена простая последовательность действий, которая во многих случаях помогает безболезненно устранить проблемы с использованием электронной цифровой подписи (ЭЦП) и ключей ФСЗН. Сразу обращу ваше внимание, что проблемы со входом и авторизацией на портале ФСЗН при успешно работающей ЭЦП в этой статье не рассматриваются. Так что если вы можете подписать свои документы, но не можете зайти или авторизоваться на портале, читайте другие материалы в этом блоге:

Впрочем, одним из условий работы с порталом является правильно установленное, настроенное и исправно работающее программное обеспечение для ЭЦП. Если вы не можете войти в программу формирования ЭЦП или, войдя, подписать нужную пачку документов, то читайте дальше.

Для формирования ЭЦП используются удостоверяющие сертификаты, соответствующие им криптографические ключи, сохраненные на специальных носителях, а также криптографическое программное обеспечение (ПО). Ранее выдачей сертификатов и ключей занимался сам фонд, причем ключи предоставлялись пользователям бесплатно. С 1 апреля 2017 года ФСЗН перестал выдавать собственные сертификаты и ключи для ЭЦП. Все новые ключи выдаются учреждением ГосСУОК и только на платной основе. Ключи от ГосСУОК универсальные, с их помощью можно подписывать документы и авторизоваться в программах и на порталах МНС, ФСЗН, ЭСЧФ, Госкомстата, Белгосстраха и т.д. Но пока еще в организациях страны используется значительное количество сертификатов и ключей, выданных ранее Фондом соцзащиты. Их можно использовать до окончания срока действия сертификата. Ключи от ФСЗН хранились на обычных флешках, ключи от ГосСУОК хранятся на специальном носителе, который только внешне напоминает флешку.

Для использования ЭЦП необходимо установить на компьютер специальное ПО: программу работы с ЭЦП ПСКЗИ АСУ ПУ в случае использования старых ключей, выданных ФСЗН, или автоматизированное рабочее место плательщика ИОК КАИС Фонда при работе с новыми ключами ГосСУОК. При установке данного ПО из инсталляционных пакетов, скачиваемых с сайта ФСЗН (ссылки будут приведены ниже), на компьютер также устанавливается криптопровайдер «Авест» (Avest).

Проблемы с ЭЦП чаще всего встречаются на тех компьютерах, где помимо ПО для работы с ЭЦП Фонда соцзащиты населения установлены другие программы, также использующие ЭЦП. На сегодняшний день цифровые подписи требуются для работы с банками, электронными счетами-фактурами, для предоставления отчетности в МНС, Госкомстат и другие организации. Однако каждая из организаций может использовать различные версии криптографического ПО, а их совместное использование часто приводит к нарушению работы ЭЦП.

Читать еще:  Ошибка в cryptmsgopentoencode c000000d при подписании

Итак, если вы не можете подписать пачку документов, получаете сообщение об ошибке при входе в программу или в момент подписи, не видите свой криптографический ключ и т.п., то причин обычно не так уж много:

  1. Неправильно установленное ПО для работы с ЭЦП.
  2. Конфликт версий установленного ПО.
  3. Не установленный или прекративший действие сертификат.

В первых двух случаях ошибки обычно проявляются уже при входе в программу или в момент подписи документа. Например, пользователь получает сообщения «Ошибка AvFundCrypt», «Ошибка AvCryptMail», «Ошибка при вызове функции Win32 API». В таких случаях поможет правильная установка нужных версий программного обеспечения. Выполняем следующие шаги (рассматриваем пример для старых ключей ФСЗН):

  1. Удаляем установленное ПО от ФСЗН. Для этого заходим в Панель управления, находим там пункт «Удаление программ» (либо «Программы и компоненты», «Установка и удаление программ» — в зависимости от версии операционной системы и вида Панели управления). Находим в списке программ и поочередно удаляем:
    — Клиентское ПО ПСКЗИ АСУ ПУ для плательщиков ФСЗН;
    — Avest CSP for BelSSF (обращаем внимание на номер версии, скорее всего там будет v5.1.0.647);
    — Avest CSP более свежих версий, например v6.2.0.773.
  2. Перезагружаем компьютер. Обратите внимание, что менеджеры сертификатов мы не удаляли — они будут работать и после переустановки криптографического ПО.
  3. Заходим на эту страницу сайта ФСЗН со списком необходимого ПО и скачиваем:
    — в случае старых ключей, полученных в ФСЗН — программу работы с ЭЦП ПСКЗИ АСУ ПУ;
    — при наличии новых ключей, полученных в ГосСУОК — автоматизированное рабочее место плательщика ИОК КАИС Фонда;
    — при необходимости — сертификаты и списки отозванных сертификатов (СОС) корневого удостоверяющего центра и удостоверяющего центра, выдавшего ваш сертификат.
  4. Заходим на эту страницу сайта «Авест» и скачиваем последнюю версию криптопровайдера AvCSP (на текущий момент это версия 6.3.0.791).
  5. Устанавливаем программу работы с ЭЦП ПСКЗИ АСУ ПУ (либо ИОК КАИС при наличии ключей ГосСУОК) Фонда.
  6. Перезагружаем компьютер.
  7. Устанавливаем последнюю версию криптопровайдера AvCSP. При необходимости перезагружаем компьютер.

Такая последовательность действий обычно позволяет исправить проблемы с использованием ЭЦП Фонда и не нарушает работы остальных установленных программ, использующих ЭЦП. Впрочем, со стопроцентной уверенностью это утверждать нельзя: в используемых программах много недоработок. Пути устранения некоторых из них рассматривались в материалах, ссылки на которые расположены в начале данной статьи.

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

И напоследок, хоть и обещал не писать о проблемах с государственными порталами, напомню о часто встречающейся невозможности подключения или авторизации на портале ФСЗН при работающем антивирусе. В таком случае приходится отключать антивирус до входа на портал. Также можно отключить в настройках антивируса проверку протокола HTTPS (обычно в настройках модуля, отвечающего за проверку веб-страниц).

Обслуживание компьютеров

+375 33 604-604-0 MTC

+375 29 604-640-0 Velcom

  • Просмотров: 27881
  • Автор: Ivan
  • Дата: 14-07-2015, 19:35

Основные причины, почему не работает ФСЗН (Беларусь)

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp2. Крайне редко, но все же встречается ситуация при которой все установлено верно, но на страницу ФСЗН-а не пускает.
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspВот один из примеров почему такое может происходить:
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspВ зависимости от битности Вашей системы заходим в редактор реестра и ищем (Пус-выполнить-regedit): для x64: [HKEY_LOCAL_MACHINE SOFTWARE Wow6432Node Microsoft Windows NT CurrentVersion Windows] для х32: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion Windows Ищем параметр AppInit_DLLs и дважды щелкаем по нему для просмотра содержимого
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspПример: C:PROGRA

1AvSSPc.dll
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspРешение:
a) для XP нужно включить поддержку коротких имен в реестре: HKEY_LOCAL_MACHINESystemCurrentControlSetFileSystem находим параметр: Ntfsdisable8dot3NameCreation и меняем значение с 1 на 0. Деинсталлируем Авест от for BelSSF, удаляем папку c:program filesCommon FilesAvest, если она осталась. И заново устанавливаем Авест for BelSSF.
б) для 7-8-10. Возможное временное решение проблемы авторизации на портале из-за отключенных «коротких» имен.
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspСимволическая ссылка (symlink) — специальный файл в файловой системе, для которого формируется только одна текстовая строка с указателем. Данная строка показывает путь к файлу (ссылку), который открывается при попытке обращения к ней. Целью строки с указателем может быть любой объект — другой файл, ссылка или папка.
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspВ нашем случае целью ссылки является папка Avest CSP по пути c: Program Files Common Files Avest либо c: Program Files (х86) Common Files Avest
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspДействия:
1. Определиться куда будет создаваться символическая ссылка (например: C:Users)
2. Запустить командную строку
3. Выполнить команду:
mklink /D c:Usersavcsp «c: Program Files Common Files Avest Avest CSP»
либо mklink /D c:Usersavcsp «c: Рrоgram Files (х86) Соmmоn Filеs Avеst Avеst CSP»
Символическая ссылка создана для c:Usersavcsp > c: Program Files Common Files Avest Avest CSP либо c: Program Files (х86) Common Files Avest Avest CSP
4. Открыть редактор реестра. В параметре AppInit_DLLs поменять путь на c:UsersavcspAvSSPc.dll
5. Перезагрузить компьютер.
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspДанное решение является временным, в связи с тем, что после обновления криптовайдера Авест или Обновления регистрации компонентов в системном реестре все проделанные вами настройки слетят и описанную выше процедуру придется повторить.
&nbsp&nbsp&nbsp&nbsp&nbsp&nbspХотя Вы можете создать себе батник, который для упрощения можете запускать. Вот примеры для х64 и для х32 систем.

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Более подробную информацию и квалифицированную помощь Вы можете получить по телефону +375 (33) 604-604-0 или перейдя к нам на абонентское обслуживание, которое решит все Ваши проблемы в сфере IT-администрирования! Обслуживание компьютеров

Ссылка на основную публикацию
Adblock
detector