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

пятница, 25 октября 2024 г.

Запуск UltraVNC сервера на удаленном компьютере в локальной сети через PsExec

Есть такой программный комплекс LANDesk Remote Control, который используется для удаленного подключения к компьютерам в локальной сети. Данная программа состоит: 

- из программы LANDesk Remote Control Agent - это агент, который устанавливается на все компьютеры к которым нужно подключаться.  
- из программа LANDesk Remote Control Viewer – это удаленный просмоторщик, с помощью неё мы подключаемся к нужному компьютеру, где установлен агент.
- из  LANDesk Remote Control Console — это консоль управления, что-то вроде каталога базы данных, куда агенты посылают информацию о компьютерах.

Данный программный комплекс можно использовать по назначению, но есть несколько проблем, которые я бы хотел перечислить:

1) Агент бывает иногда некорректно устанавливается на компьютер
2) Каталог базы данных бывает иногда глючит и не может корректно общаться с агентом
3) Агент иногда теряет связь с каталогом базы данных

Данные проблемы с горем пополам удается решить, но на решение данных проблем уходит большое количество времени от 30 минут до 4 часов в зависимости от характеристик компьютера.

По этой причине мне пришлось искать другие решения для удаленного управления компьютерами в локальной сети. Пора научиться пользоваться программой под названием UltraVNC.

Поискав в Google информацию по настройке сервера UltraVNC я наткнулся на сайт, где рассказывается как можно автоматизировать установку и настройку сервера UltraVNC. Вот это ссылка. На основе этой статьи я написал свои batch файлы для автоматизации развертывания сервера UltraVNC и по необходимости его удаление.           

Первым делом качаем портативную версию UltraVNC с официального сайта она поставляется в заархивированном виде (ZIP файл) https://uvnc.com/component/jdownloads/summary/470-ultravnc-1-4-6-zip.html . На момент написания статьи последняя версия представленная на официальном сайте 1.4.3.6 версия. На всякий случаю оставлю ссылку на главную страницу скачивания UltraVNC https://uvnc.com/downloads/ultravnc.html . Распакуйте архив и вы увидите в нем UltraVNC для платформы x86 и x64. Тут принцип простой если вы подключаетесь к компьютеру с 32-х битной системой Windows, то используйте сервер UltraVNC (winvnc.exe) из папки x86, если вы подключаетесь к компьютеру с 64-х битной системой Windows, то используйте сервер UltraVNC (winvnc.exe) из папки x64. Теперь запустите у себя на компьютере файл winvnc.exe из папки x86 или х64 в зависимости от разрядности вышей Windows. В результате этого у вас откроется окно показанное на рисунке 1.

Рисунок 1. Настройка сервера UltraVNC

В этом окне необходимо выполнить два действия:

1) Установить разные пароли для режима управления и режима просмотра удаленного компьютера (Смотрите рисунок 1 цифра 1)
2) Установить опцию отключения значка в трее на панели задач рядом с часами (Смотрите рисунок 1 цифра 2)
Нажмите кнопку Apply и Ok для сохранения всех настроек сервера UltraVNC в файл UltraVNC.ini.

Так же скачайте утилиту PsExec с официального сайта Microsoft по этой ссылке. Или по прямой ссылке. Достаем из архива файл PsExec.exe сохраняем его в папку cmd2 на диске F или в другую любую папку на ваш выбор. За одно в папку cmd2 копируем файл winvnc.exe и файл UltraVNC.ini.  

Переходим к написанию batch файлов.  В папке cmd2 создайте файл uvnc.bat и файл uvnc_del.bat.

Важно! У вас должны быть права администратора на удаленном компьютере. Файлы uvnc.bat и uvnc_del.bat необходимо запускать в командной строке Windows. Синтаксис запуска скриптов следующий: 

 uvnc.bat pc01
 uvnc_del.bat pc01

pc01 - это имя удаленного компьютера, куда вы запускаете сервер UltraVNC.    

Содержимое файла uvnc.bat c комментариями:

@echo off
cls

net use O: /delete /y

if exist \\%1\C$\Temp\ (
   net use O: \\%1\C$\Temp
) else (
  net use O: \\%1\C$
  mkdir O:\Temp
  net use O: /delete /y
  net use O: \\%1\C$\Temp
)
mkdir O:\uvnc
copy "%~d0%~p0\winvnc.exe" "O:\uvnc" /y
copy "%~d0%~p0\UltraVNC.ini" "O:\uvnc" /y

psexec \\%1 net stop uvnc_service
psexec \\%1 "taskkill.exe" /f /im winvnc*

psexec \\%1 C:\Temp\uvnc\winvnc.exe -install

pause 

Комментарий по коду выше:
net use O: /delete /y (Удаляем сетевой диск O: если он существует)

if exist \\%1\C$\Temp\ (Этой строкой проверим существует ли на удаленном компьютере папка Temp в корне диска C, где %1 — автоматически подставится имя удаленного компьютера)
Если папка Temp существует, то строкой  net use O: \\%1\C$\Temp создаем сетевой диск O, который указывает на папку C:\Temp на удаленном компьютере.  
Если папка Temp не существует, то строкой  net use O: \\%1\C$ создаем сетевой диск O, который указывает в корень диска C на удаленном компьютере, строкой mkdir O:\Temp на сетевом диске O: создаем папку Temp, строкой net use O: /delete /y удаляем сетевой диск O:, строкой  net use O: \\%1\C$\Temp создаем сетевой диск O, который указывает на папку C:\Temp на удаленном компьютере.
Строкой  mkdir O:\uvnc создадим папку uvnc на сетевом диске O.

Строками
copy "%~d0%~p0\winvnc.exe" "O:\uvnc" /y
copy "%~d0%~p0\UltraVNC.ini" "O:\uvnc" /y      
скопируем из папки F:\cmd2 файл winvnc.exe и файл UltraVNC.ini в папку uvnc на сетевом диске O. (%~d0%~p0 — это строка означает путь откуда выполняется скрипт uvnc.bat, в частности это F:\cmd2)

Строками
psexec \\%1 net stop uvnc_service
psexec \\%1 "taskkill.exe" /f /im winvnc*

psexec \\%1 C:\Temp\uvnc\winvnc.exe -install

мы на удаленном компьютере останавливаем службу uvnc_service сервера UltraVNC (psexec \\%1 net stop uvnc_service), потом выгружаем на удаленном компьютере процессы из памяти с именем winvnc если такие имеют место быть (psexec \\%1 "taskkill.exe" /f /im winvnc*), потом устанавливаем на удаленном компьютере сервер UltraVNC в виде службы с именем uvnc_service (psexec \\%1 C:\Temp\uvnc\winvnc.exe -install).

Содержимое файла uvnc_del.bat c комментариями: 

@echo off
cls

psexec \\%1 net stop uvnc_service
psexec \\%1 "taskkill.exe" /f /im winvnc*

psexec \\%1 C:\Temp\uvnc\winvnc.exe -uninstall

del /q O:\uvnc\*
rd O:\uvnc

net use O: /delete /y
pause  

Строкой psexec \\%1 net stop uvnc_service мы на удаленном компьютере останавливаем службу uvnc_service сервера UltraVNC.
Строкой psexec \\%1 "taskkill.exe" /f /im winvnc* выгружаем на удаленном компьютере процессы из памяти с именем winvnc если такие есть.
Строкой psexec \\%1 C:\Temp\uvnc\winvnc.exe -uninstall удаляем на удаленном компьютере службу с именем uvnc_service

Строкой del /q O:\uvnc\* удаляем на удаленном компьютере все файлы в папке uvnc на сетевом диске O.
Строкой rd O:\uvnc удаляем на удаленном компьютере папку uvnc на сетевом диске O.
Строкой net use O: /delete /y удаляем сетевой диск O: если он существует.

Всё. Как только сервер UltraVNC заработает на удаленном компьютере, то вам останется запустить vncviewer.exe программу удаленный просмоторщик, ввести имя удаленного компьютера к которому мы хотим подключится, вводим пароль который мы установили при настройке сервера UltraVNC и нажимаем кнопку Connect (Смотрите рисунок 2).

Рисунок 2. Окно программы просмоторщика UltraVNC

В данном примере мы запустили сервер UltraVNC в режиме службы, я пытался запустить также сервер в режиме приложения, но данный режим по какой-то причине не работает, скорее всего не хватает прав, смотрите рисунок 3 как это выглядит при попытке подключения к удаленному компьютеру.
 
Рисунок 3. Просмоторщик UltraVNC запущенный в режиме приложения

понедельник, 7 октября 2024 г.

Проблемы подключения принтеров HP LaserJet P2014 и HP LaserJet P2015 в Windows 10 Pro 64 bit или 32 bit по USB

Сразу скажу, что принтера HP LaserJet P2014, HP LaserJet P2015 с Windows 10 Pro 64 bit или 32 bit дружат плохо (в частности пробовал заставить работать данный принтер на Windows 10 Pro 64 bit 20H2). У меня возникала проблема подключения принтера по USB кабелю. Даже при наличии в Windows предустановленных драйверов на принтер, он не желает устанавливаться ни автоматическом, ни в ручном режимах.

Симптомы проблемы следующие:

- в диспетчере устройств в разделе "Контроллеры USB устройств" вы видите устройство "Поддержка USB принтера", которое висит с восклицательным знаком. Если зайти в свойства этого устройства, то во вкладке общие в секции состояния устройства вы видите код ошибки 10 (Запуск это устройства прервано или остановлено).

Что пробовал делать:

- Переключение принтера в другие свободные USB порты на системном блоке проблему не решает

- Перезагрузка компьютера проблему не решает

- Выключение и включение принтера проблему не решает

Путем долгих часов поиска решения проблемы выяснилось, что для это принтера необходимо установить в Windows 10 Pro 64 bit программу (драйвер порта от HP) который называется Dot4x64.msi (Windows 10 Pro 64 bit) или Dot4x86.msi (Windows 10 Pro 32 bit).

На сайте HP на странице скачивания драйверов к принтеру HP LaserJet 1320 для Windows 10 можно скачать файл (Dot4x86.msi) (Windows 10 Pro 32 bit) и (Dot4x64.msi) (Windows 10 Pro 64 bit). Внимание! Обязательно проверяйте скаченные файлы антивирусом.

Данные принтеры (HP LaserJet P2014, HP LaserJet P2015) в Windows 10 Pro 64 bit после отключения системного блока или перезагрузке самопроизвольно создают порты DOT4USB и создают новый логический принтер с новым именем (добавляется в конце имени Копия 1,2,3..N). Так же наблюдается периодическое отвал этих моделей принтеров от USB разъёма компьютера, что требуется переключение их в другой свободный USB порт, после этого данные модели принтеров будут работать до следующего отвала от USB. Данная проблема наблюдается в Windows 10 Pro 64 bit, замечу что в Windows 7 Pro 32 bit такой проблемы нет, в Winndows 7 данные модели принтеров работают отлично.

воскресенье, 12 сентября 2021 г.

Проблема с активацией Windows 7. Ошибка 0x8004FE2F. Ошибка 0xC004C008.

Если при активации Windows 7 вы получаете сообщение с ошибкой 0x8004FE2F, то это ошибка скорее всего связана с настройками доступа в Интернет. Если у вас Интернет работает через прокси-сервер, то убедитесь, что в свойствах браузера прописан ip адрес и порт вашего прокси-сервера (смотрите рисунок 1 цифра 2). Для этого зайдите в «Панель управления», потом выберите «Свойства браузера». В «Свойства браузера» выберите вкладку «Подключения», нажмите кнопку «Настройка сети». В разделе «Автоматическая настройка» убедитесь, чтобы все опции были отключены (смотрите рисунок 1 цифра 1). 

Рисунок 1. Настройка прокси-сервера

Так же в дополнительных настройках брандмауэра необходимо включить все правила для входящих и исходящих подключений. Для этого зайдите в «Панель управления», выберите «Брандмауэр Windows», нажмите ссылку «Дополнительные параметры».

Также можно выполнить команду gpupdate /force в командной строке Windows для принудительного применения политик домена.

Информация взята с сайта http://system-administrators.info/?p=6448c004c008

Если при активации Windows 7 вы получаете сообщение с ошибкой 0xC004C008, то это ошибка скорее всего связана с тем, что на корпоративном KMS сервере превышено число активаций для вашего корпоративного ключа продукта. Попробуйте поменять ключ продукта на OEM MAK ключ.

Информация взята с сайта https://docs.microsoft.com/ru-RU/windows-server/get-started/activation-error-codes#0xc004c008-the-activation-server-determined-that-the-specified-product-key-could-not-be-used


суббота, 11 сентября 2021 г.

Заметки по подключению ГИИС ДМДК

1. Устанавливаем Яндекс.Браузер (https://browser.yandex.ru/). Браузер должен быть последней версии. Если не хотите получить ошибку err_ssl_version_or_cipher_mismatch при заходе на страницу личного кабинета ГИИС ДМДК (https://lk.dmdk.ru/), то в Яндекс.Браузер в настройках системы нужно включить опцию (Подключаться к сайтам, использующим шифрование по ГОСТ. Требуется КриптоПро CSP.). Подробнее об этом читаем по этой ссылке (https://yandex.ru/support/browser-corporate/tls/tls.html)

2. Устанавливаем КриптоПРО CSP (https://cryptopro.ru/products/csp). Для нормальной работы личного кабинета ГИИС ДМДК, КриптоПРО CSP должен быть самой последней версии, на данный момент это версия 5. Если вы имеете на руках ключ от КриптоПРО CSP 4 версии, то этот ключ должен подойти к КриптоПРО CSP 5.0.11455 (об этом можно почитать по ссылке https://github.com/deemru/chromium-gost/releases/tag/92.0.4515.160). К другим версиям КриптоПРО CSP 5 ключ от КриптоПРО CSP 4 не подойдет.

3. Устанавливаем КриптоПро ЭЦП Browser plug-in (http://www.cryptopro.ru/products/cades/plugin). Плагин должен быть самой последней версии.

4. Пользовательский сертификат на носителе ЭЦП должен быть действующий на 11 лет, иначе при заходе в личный кабинет ГИИС ДМДК будете получать сообщение об ошибке "Не удалось войти! Сертификат не соответствует требованиям. Срок действия сертификата меньше требуемого" или похожее на него. В поддержке ГИИС ДМДК сказали, что такие сертификаты выдают удостоверяющие центры "Тензор" и "Контур".

5. Скачиваем корневой сертификат Минкомсвязи России http://reestr-pki.ru/cdp/guc_gost12 и устанавливаем в хранилище «Доверенные корневые центры сертификации».

6. Скачиваем промежуточный сертификат ЗАО «Национальный удостоверяющий центр» http://www.ncarf.ru/download/zaonucpak3 и устанавливаем в хранилище «Промежуточные центры сертификации».

При заходе на страницу личного кабинета ГИИС ДМДК (https://lk.dmdk.ru/) вы получаете ошибку ERR_BAD_SSL_CLIENT_AUTH_CERT. У меня это ошибка проявилась один раз. Точно не знаю с чем она связана, но после установки всего необходимого программного обеспечения последних версий, данная ошибка исчезла.

Если все равно у вас не получается зайти в личный кабинет ГИИС ДМДК (https://lk.dmdk.ru/), то попробуйте выполнить установку и настройку всего необходимого программного обеспечения согласно официальной инструкции ГИИС ДМДК (https://dmdk.ru/upload/iblock/356/RP-1.-Nastroyka-PK-dlya-raboty-s-GIIS-DMDK.pdf)       

Все роботы выполнялись под управлением Windows 7 32 bit.

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

Дополнительный пост по командам KMS активации в корпоративном домене

Я уже писал про KMS - активацию в этой статье (https://notidealrunner.blogspot.com/2016/06/windows-7-office-2010-kms.html), в этом посте я ее дополню. 

Бывает ситуация, что имя KMS сервера у вас прописан в реестре и он там прописан не правильный, тогда необходимо проделать следующие действия:

1) Запускаем программу редактирования реестра Windows и смотрим там наличия ключа 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SoftwareProtectionPlatform\KeyManagementServiceName

Этот ключ может указывать явно на конкретный и уже неактуальный KMS-сервер активации, например, в результате ранее примененной команды slmgr /skms. По умолчанию, такого ключа быть не должно. Имя сервера активации клиент определяет по специальной записи в DNS (_VLMCS). Чтобы убедится, что записи SRV узла KMS зарегистрированы в DNS. Для этого выполните на клиенте следующую команду:

nslookup -type=all _vlmcs._tcp>kms.txt

В файле kms.txt должна содержаться запись о KMS-сервере. Подробно читаем на сайте Microsoft (https://docs.microsoft.com/ru-ru/windows-server/get-started/common-troubleshooting-procedures-kms-dns).

2) Если в реестре ключ KeyManagementSrviceName есть, то необходимо на клиенте KMS выполнить очистку всех ранее кэшированных имен узлов KMS со сведениями о сервере активации, т.е. перевод клиента на активацию через сервер, указанный в DNS. Для этого на клиенте выполните команду slmgr /ckms 

Ключ в реестре исчезнет и вы увидите следующие сообщение "Имя компьютера со службой управления ключами успешно удалено". Далее если вы выполните принудительную активацию командой slmgr /ato, то система активируется успешно. 

Синий экран смерти (BSOD) под номером 0x7B под Windows 7 32bit

Если при попытке загрузить Windows 7 32 bit у вас на экране появляется синий экран смерти (BSOD) 0x7B, то скорее всего в BIOS неправильно выставлен режим загрузки ACHI или IDE

1) Если стоит ACHI, то измените на IDE и перезагрузите компьютер.

2) Если стоит IDE, то измените на ACHI и перезагрузите компьютер.

После перезагрузки, Windows 7 должна начать загружаться. 

Проблема загрузки Windows 7 32bit. Не найдена операционная система

Столкнулся с проблемой загрузки Windows 7 32bit, после включения компьютера, прогрузки биоса, выдается сообщение (An operating system wasn't found. Try disconnecting any drives that don't contain an operating system. Press Ctrl+Alt+Del to restart.). В Интернете нашел три причины, почему такое сообщение может возникать:

а) может быть что-то произошло с загрузочной MBR записью (активный раздел не выставлен)
б) поврежден загрузчик BCD
в) жесткий диск недоступен (проверить виден ли жесткий диск в BIOS)

Мне помогла загрузка с загрузочного диска и запуск средств восстановления системы. Выбираем на экране "Выбор действия" нажимаем "Поиск неисправностей", потом "Дополнительные параметры" и выбираем "Автоматическое восстановление". Мы выбрали опцию устранения неполадок, мешающих загрузке Windows. После окончания восстановления необходимо перезагрузить компьютер. Так же восстановление системы можно запустить нажимая клавишу F8 после включения компьютера и выбрать раздел "Устранение неполадок". Для Windows 10 надо нажимать сочетание клавиш F8 и Shift.

Другие решения по ошибке вы можете почитать по ссылке:
https://winitpro.ru/index.php/2019/10/15/oshibka-zagruzki-operating-system-not-found/

четверг, 6 мая 2021 г.

Установка драйвера сканера Mustek BearPaw 2448TA Pro 2 под Windows 7 32 bit и 64 bit

 1. Скачиваем драйвера с официального сайта Mustek по следующей прямой ссылке:

http://ftp3.mustek.com/pub/new/driver/0_Old_BearPaw%20Series/BearPaw%202448TA%20Pro%20II/Windows_Vista/23LV10/web.EXE

Или не по прямой http://ftp3.mustek.com/pub/new/, для этого вам необходимо найти драйвер самостоятельно.

2. Если у вас 64-ая система Windows 7, то вам достаточно запустить в режиме совместимости с Windows Vista скаченный файл web.EXE и установить. После этого сканер должен заработать после перезагрузки компьютера. Должны заработать как twain, так и wia драйвера. Единственное неудобство это то, что сканер Mustek BearPaw 2448TA Pro 2 долго прогревается, так как он ламповый. Прогрев может длиться от 40 до 90 секунд перед каждым запуском сканирования, как и в twain режиме, так и в wia режиме. Если сканер повиснет в процессе сканирования, то отключите питание сканера и опять включите. Потом перезагрузите компьютер. После этого сканирование должно заработать.

 3. Если у вас 32-ая система Windows 7, то вам необходимо сначала установить на свой компьютер программу VirtualBox с официального сайта https://www.virtualbox.org/ и в эту виртуальную машину необходимо установить гостевую операционную систему Windows XP. Потом в гостевой ОС Windows XP необходимо скачать драйвер с официального сайта Mustek по следующей прямой ссылке:

http://ftp3.mustek.com/pub/new/driver/0_Old_BearPaw%20Series/BearPaw%202448TA%20Pro%20II/Windows_Vista/23LV10/web.EXE

и запустить в режиме совместимости с Windows XP и установить. Далее после установки в гостевой ОС Windows XP открываем папку C:\Windows\Temp, в ней находим подпапку WinXP32. Скопируйте папку WinXP32 на флэшку или в общую папку гостевой ОС Windows XP. Также скопируйте папку A12U16KU2, которая расположена в C:\Windows\twain_32\.

Закройте программу VirtualBox, она нам больше не понадобится. Теперь на Windows 7 32 bit запустите в режиме совместимости с Windows Vista файл web.EXE и установите. Перезагрузите компьютер. На Windows 7 32 bit перейдите в папку C:\Windows\twain_32\ и удалите там папку A12U16KU2 и вместо нее скопируйте папку A12U16KU2, которую мы скопировали из Windows XP. Таким образом мы установили Twain - драйвер. Далее в Windows 7 32 bit открываем диспетчер устройств. Щелкаем правой кнопкой мыши на значке «Компьютер» на «Рабочем столе» или в меню «Пуск» щелкаем правой кнопкой мыши на значке «Компьютер» выбираем пункт меню «Управление» (смотрите рисунок 1).


Рисунок 1. Открытие диспетчер устройств

 Так же диспетчер устройств можно открыть из «Панели управления». В диспетчере устройств находим раздел «Другие устройства» и подраздел «USB2.0 Scanner» (смотрите рисунок 2), нажимаем на нем правой кнопкой мыши и выбираем пункт меню «Обновить драйверы...».  


Рисунок 2. Выбор устройства для обновления драйвера

 Далее в окне обновления драйверов нажимаем кнопку «Выполнить поиск драйверов на этом компьютере», потом нажимаем кнопку «Обзор» и указываем папку WinXP32, которую мы скопировали из Windows XP. Нажимаем кнопку «Далее». Таким образом мы установили Wia — драйвер. Перезагрузите компьютер. После этого сканирование должно заработать.

В процесс использования этого сканера могут быть глюки и зависания, так как Mustek по ходу не поддерживают в драйверах для этой модели сканера более новые операционные системы, чем Windows XP. Я рекомендую не мучиться с этой моделью сканера и приобрести какой нибудь новый, современный сканер, только не Mustek, так как с драйверами у них какая-то засада.

суббота, 27 марта 2021 г.

Отличные бесплатные программы для записи CD и DVD дисков, для сканирования в PDF

Small CD Writer - портативная бесплатная программа для записи CD и DVD дисков (смотрите рисунок 1). Скачать можно по следующей ссылке: http://avt-lab.ru/scdwriter.htm

Рисунок 1. Внешний вид программы Small CD Writer

WinScan2PDF - портативная бесплатная программа для сканирования и сохранения отсканированных документов в многостраничный PDF документ (смотрите рисунок 2). Скачать можно по следующей ссылке: http://www.softwareok.com/?seite=Microsoft/WinScan2PDF

Рисунок 2. Внешний вид программы WinScan2PDF

NAPS2 - бесплатная программа для сканирования и сохранения отсканированных документов в многостраничный PDF документ (смотрите рисунок 3). Скачать можно по следующей ссылке: https://www.naps2.com/

Рисунок 3. Внешний вид программы NAPS2

Сканирование через USB сканер по сети с других компьютеров при помощи программы NAPS2

Есть такая полезная программа для сканирования по USB или по сети, в зависимости от того как подключен у вас сканер, называется она NAPS2. Преимущества программы:

- Программа относится к открытому исходному коду. Исходники находятся на Github (https://github.com/cyanfish/naps2). Бинарные файлы для Windows качаем от сюда (https://www.naps2.com/).

- Программа поддерживает, как и Twain устройства, так и Wia.

- Умеет сканировать как с автоподатчика так и со стекла.

- Умеет сохранять сканированные страницы в многостраничный PDF документ.

Так же на GitHub есть программа, называется она NAPS2 Remote Scan Server, данная программа позволяет сканировать через USB сканер по сети с других компьютеров. Для своей работы программа использует консольное приложение NAPS2 и профиль сканирования, который у вас настроен по умолчанию. Качаем эту программу с Github (https://github.com/corred/NAPS2-Remote-Scan).

Как эту программу настроить? Если вы скачали программу Naps2 remote scan, то распакуйте ее из архива, скопируйте из папки Win32/Debug два файла NAPS2RemoteScan.exe и index.html в папку C:\Scan.  Предоставьте к папке C:\Scan общий доступ по сети для всех пользователей или для конкретного пользователя с правами на запись и чтение. Т.е. общая папка у нас будет расположена по следующему пути \\pc01\Scan . Далее на компьютере pc01 запускаем программу NAPS2RemoteScan.exe, прописываем путь до консольной программы NAPS2.Console.exe (Смотрите рисунок 1). Сканер по USB подключен к pc01. Уточню, что pc01 имеет IP адрес 192.168.1.2, а pc02 имеет IP адрес 192.168.1.3

Рисунок 1. Внешний вид программы NAPS2 Remote Scan

Как проверить работу USB сканера через сеть? Идем на компьютер pc02, открываем браузер в адресной строке вводим http://pc01 и у вас должна открыться страница со ссылкой на сканирование (смотрите рисунок 2). 

Рисунок 2. Удаленный запуск сканирования на другой компьютер по USB

Нажимаете ссылку Scan и после этого запустится сканирование на USB сканер подключенного к компьютеру pc01. Сканирование будет осуществляться программой NAPS2, профилем, установленным по умолчанию. Если у вас в профиле сканирование настроено брать листы сканирования из автоподатчика, то листы должны лежать в автоподатчике, иначе сканирование не заработает. Если вам нужно сканировать со стекла, то настройте профиль сканирования на работу со стекла и установите его по умолчанию (смотрите рисунок 3). 

Рисунок 3. Создание профиля сканирования в программе NAPS2

Все отсканированные страницы будут сохранятся в формате jpg в общей папке Scan и в подпапках с именами соответствующие IP адресам компьютеров с которых производилось сканирование. Например, для компьютера pc02 подпапка будет называться 192.168.1.3. Сетевой путь будет такой \\pc01\Scan\192.168.1.3 .

Можно ли настроить представленный механизм сканирования на сохранение всех отсканированных страниц в многостраничный PDF файл? Наверное, можно, но я не пробовал настраивать. Если у кого получиться, то отпишитесь в комментариях. 

Далее вам нужно найти программу в Интернет, которая умеет объединять картинки из jpg в один pdf файл.

пятница, 19 марта 2021 г.

Оригинальное программное обеспечение для сканера Canon DR-3010C выдает предупреждение о замене роликов под Windows 7 32 bit

Как выяснилось данное сообщение показывается (смотрите рисунок 1), если превышен предел использования роликов сканера. Число предела 100000. Данный сканер отсканировал более 365000 страниц.

Рисунок 1. Сообщение о необходимости замены роликов

Чтобы избавится от этого сообщения необходимо в свойствах сканирования (смотрите рисунок 2) на вкладке «Обслуживание» сбросить счетчик «Используемые ролики». 

Рисунок 2. Открытие окна свойств сканера

Для этого необходимо нажать кнопку «Сброс» (смотрите рисунок 3).  

Рисунок 3. Раздел обслуживания сканера для сброса счетчика

вторник, 15 октября 2019 г.

Проблема с CryptoPro версии 3.6.7777 и ниже

Старые версии CryptoPro, в частности версии 3.6.7777, не умеют работать с закрытыми ключами созданными по алгоритму шифрования ГОСТ Р 34.10-2012. Если вы попытаетесь просмотреть такой ключ в версии 3.6.7777, то получите невменяемую ошибку повреждения контейнера, проверка ключа тоже выдаст ошибки. Поэтому необходимо использовать самую новую версию CryptoPro 4.0.9944.

четверг, 8 августа 2019 г.

Автоматический вход на рабочий стол под доменной учетной записью в Windows 7, 10

Иногда бывает необходимость настроить на Windows 7, 10 автоматический вход на рабочий стол под доменной учетной записью. Для этого откройте реестр Windows, перейдите в раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon и изменить значения следующих строковых параметров:

"AutoAdminLogon"="1"
"DefaultDomainName"="DOMAIN"
"DefaultUserName"="User"
"DefaultPassword"="Password"

Строковые параметры DefaultUserName и DefaultPassword по умолчанию отсутствуют, их необходимо создать вручную. Потом необходимо перезагрузить компьютер.

вторник, 23 июля 2019 г.

Ошибка BSOD 0x0000006B: PROCESS1_INITIALIZATION_FAILED

Методов решения ошибки BSOD 0x0000006B в Интернет я нашел множество. Здесь я отмечу метод, который мне помог решить проблему. Данная проблема возникла на Windows 7 Corporate 32 bit. На сайте Microsoft (https://support.microsoft.com/ru-ru/help/981833/stop-error-code-0x0000006b-process1-initialization-failed-error-messag) пишут, что причина возникновения данной проблемы связана с повреждением файла Bootcat.cache или с изменением его размера. Как написано в статье по ссылке выше, решить проблему удалось путем загрузки c LiveDVD и удалением файла Bootcat.cache расположенный в папке %SystemRoot%\system32\codeintegrity и дальнейшей перезагрузки компьютера.  

пятница, 21 июня 2019 г.

Получаем версию операционной системы Windows в Delphi 7

Есть такая известная функция получения версии операционной системы Windows – GetVersionEx, но начиная с версии Windows 8 и выше данная функция работает должным образом только совместно с файлом манифеста.

Создайте новый проект. Сохраните проект с именем p21.dpr. Основной модуль назовите p21_unit1.pas. В каталоге проекта создайте файл манифеста Windows.manifest. Содержимое файла должно быть следующее:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" name="App" version="3.1.0.0" processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!--The ID below indicates application support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates application support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--The ID below indicates application support for Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> 
      <!--The ID below indicates application support for Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> 
      <!--The ID below indicates application support for Windows 10 --> 
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
    </application>
  </compatibility></assembly>

Далее нам необходимо в каталоге проекта создать файл ресурсов компиляции с именем Windows.rc. Содержимое файла компиляции будет следующее:

1 24 "Windows.manifest"

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

Файл ресурсов компиляции Windows.rc необходимо скомпилировать при помощи компилятора ресурсов brcc32.exe, этот компилятор ресурсов расположен в каталоге, где расположены бинарные файлы Delphi, у меня это каталог D:\Programs\Delphi7\Files\Delphi7\Bin. Убедитесь, что данный каталог добавлен в переменную окружения Path. Запустите командную строку Windows, перейдите в каталог проекта и выполните команду компиляции ресурсов (Смотрите рисунок 1).

brcc32.exe Windows.rc

В качестве результата в каталоге проекта вы получите файл ресурсов Windows.RES, который необходимо в файле проекта p21.dpr подключить. Смотрите код ниже:

Рисунок 1. Создание файла ресурсов

program p21;

uses
  Forms,
  p21_unit1 in 'p21_unit1.pas' {Form1};

{$R *.res}
{$R Windows.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Разместите на форме Form1 текстовую метку Lable1. В метке Label1 мы будем отображать версию операционной системы Windows (Смотрите рисунок 2).

Рисунок 2. Создание формы приложения

Переходим к написанию кода. Рассмотрим обработчик показа формы Form1, это следующий код:

procedure TForm1.FormShow(Sender: TObject);
begin
  Label1.Caption := WinName;
end;

В обработчике показа формы Form1 мы метке Label1 присваиваем результат возврата функции WinName.

Рассмотрим две функции, которые получают версию операционной системы Windows.

function WinVerNum: integer;
var
  ver: TOSVersionInfo;
begin
  ver.dwOSVersionInfoSize := SizeOf(ver);
  if GetVersionEx(ver) then
    with ver do
      result := StrToInt(IntToStr(dwMajorVersion) + '' + IntToStr(dwMinorVersion));
end;

При помощи функции GetVersionEx мы получаем номер основной и второстепенный для нашей операционной системы Windows. Преобразуем основной и второстепенный номер в строку, выполняем соединение этих строк в одну и возвращаем результат выполнения функции WinVerNum.

function WinName: String;
begin
  if WinVerNum = 51 then result := 'Windows XP';
  if WinVerNum = 60 then result := 'Windows Vista';
  if WinVerNum = 61 then result := 'Windows 7';
  if WinVerNum = 62 then result := 'Windows 8';
  if WinVerNum = 63 then result := 'Windows 8.1';
  if WinVerNum = 100 then result := 'Windows 10';
end;

При помощи функции WinName мы получаем версию операционной системы Windows и возвращаем ее в виде строки.

Результат работы программы (Смотрите рисунок 3).

Рисунок 3. Результат работы программы

Код полностью:

unit p21_unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function WinVerNum: integer;
var
  ver: TOSVersionInfo;
begin
  ver.dwOSVersionInfoSize := SizeOf(ver);
  if GetVersionEx(ver) then
    with ver do
      result := StrToInt(IntToStr(dwMajorVersion) + '' + IntToStr(dwMinorVersion));
end;

function WinName: String;
begin
  if WinVerNum = 51 then result := 'Windows XP';
  if WinVerNum = 60 then result := 'Windows Vista';
  if WinVerNum = 61 then result := 'Windows 7';
  if WinVerNum = 62 then result := 'Windows 8';
  if WinVerNum = 63 then result := 'Windows 8.1';
  if WinVerNum = 100 then result := 'Windows 10';
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Label1.Caption := WinName;
end;

end.

Задействуем UAC в приложениях написанных на Delphi 7

UAC – это Контроль Учетных Записей (Wikipedia), используется для повышения привилегий в том случае если вашему приложению это необходимо. Появился в Windows Vista и присутствует Windows 7, 8, 10. Необходимо убедится в том, что UAC включен. В Windows 7 это можно проверить, открыв «Панель управления» - «Учетные записи пользователей» - «Изменение параметров контроля учетных записей» - убедится, что установлен уровень «По умолчанию» (Смотрите рисунок 1).

 Рисунок 1. Включение UAC в Windows 7

Создадим тестовое приложение, которое будет писать в реестр Windows выбираемые из списка значения, правда путь куда мы будем записывать значения требуют повышения привилегий. Откроем Delphi 7 и создадим новый проект. Присвоим ему имя p12.dpr. Сохраним основной модуль под именем p12_unit.pas. Чтобы научить наше приложение работать с UAC, необходимо создать в папке проекта файл манифеста, назовём его Win7UAC.manifest. Содержимое файла следующее:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" name="App" version="3.1.0.0" processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!--The ID below indicates application support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates application support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--The ID below indicates application support for Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> 
      <!--The ID below indicates application support for Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> 
      <!--The ID below indicates application support for Windows 10 --> 
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
    </application>
  </compatibility></assembly>

Основным, важным моментом в файле манифеста является строчка кода:

 <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
 </requestedPrivileges>

Параметр level со значением requireAdministrator указывает на то, что нашему приложению для работы требуются права администратора.  Следующими строчками кода мы указываем с какими операционными системами наше приложение будет совместимо:

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!--The ID below indicates application support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates application support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--The ID below indicates application support for Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> 
      <!--The ID below indicates application support for Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> 
      <!--The ID below indicates application support for Windows 10 --> 
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
    </application>
 </compatibility>

Далее нам необходимо в каталоге проекта создать файл ресурсов компиляции с именем Win7UAC.rc. Содержимое файла компиляции будет следующее:

1 24 "Win7UAC.manifest"

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

Файл ресурсов компиляции Win7UAC.rc необходимо скомпилировать при помощи компилятора ресурсов brcc32.exe, этот компилятор ресурсов расположен в каталоге, где расположены бинарные файлы Delphi, у меня это каталог D:\Programs\Delphi7\Files\Delphi7\Bin. Убедитесь, что данный каталог добавлен в переменную окружения Path. Запустите командную строку Windows, перейдите в каталог проекта и выполните команду компиляции ресурсов (Смотрите рисунок 2).

Рисунок 2. Запуск компилятора ресурсов

brcc32.exe Win7UAC.rc

В качестве результата в каталоге проекта вы получите файл ресурсов Win7UAC.RES, который необходимо в файле проекта p12.dpr подключить. Смотрите код ниже:

program p12;

uses
  Forms,
  p12_unit1 in 'p12_unit1.pas' {Form1};

{$R 'Win7UAC.RES'}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Вынесите на форму с именем Form1 одну кнопку Button1 и один список ComboBox1 (Смотрите рисунок 3).

 Рисунок 3. Создания формы приложения

Добавьте в свойства Items списка ComboBox1 две строки DOMAIN\User1 и DOMAIN\User2 (Смотрите рисунок 4). Эти строки у нас будут выбираться в ComboBox1. Также поменяйте свойства Style для списка ComboBox1 на csOwnerDraw.

Рисунок 4. Формирование списка ComboBox

Переходим к написанию кода. Рассмотрим обработчик показа формы Form1, это следующий код:

procedure TForm1.FormShow(Sender: TObject);
begin
  Combobox1.ItemIndex := Combobox1.Items.IndexOf('DOMAIN\User1');
end;

В данном обработчике мы присваиваем списку ComboBox1 значение по умолчанию значение DOMAIN\User1. 

Рассмотрим обработчик нажатия кнопки Button1, это следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
  R: TRegistry;
  openResult: Boolean;
const
  SubKey : String = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI';

begin
  strSetRegValue := ComboBox1.Text;
  if (strSetRegValue <> '') then
  begin
    R := TRegistry.Create(KEY_READ);
    R.RootKey := HKEY_LOCAL_MACHINE;
    if (R.KeyExists(SubKey)) then
    begin
      With R do
      begin
        Access := KEY_WRITE OR $0100;
        openResult := OpenKey(SubKey, False);
        if (not openResult = True) Then
        begin
          MessageDlg('Unable to create key! Exiting.', mtError, mbOKCancel, 0);
        end;
        WriteString('LastLoggedOnSAMUser', strSetRegValue);
        WriteString('LastLoggedOnUser', strSetRegValue);

        CloseKey();
        Free;
      end;
    end;
    ShowMessage('Done! Recorded in the registry.');
    strSetRegValue := '';
  end;
end;

В данном обработчике мы указываем путь в реестре Windows куда будем писать значения, это переменная типа String c именем SubKey. Смотрите код:

SubKey : String = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI';

Далее берем выбранное значение ComboBox1 и присваиваем его переменной strSetRegValue. Смотрите код:

strSetRegValue := ComboBox1.Text;

Если переменная strSetRegValue не пуста, то начинаем писать в реестр Windows. Работать будем в корневом разделе HKEY_LOCAL_MACHINE. Смотрите код:

  if (strSetRegValue <> '') then
  begin
    R := TRegistry.Create(KEY_READ);
    R.RootKey := HKEY_LOCAL_MACHINE;


Далее проверяем существует ли путь в реестре SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI. Также открываем подраздел реестра на запись для Windows 7 32 bit и 64 bit, следующая строчка: 

Access := KEY_WRITE OR $0100;


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

if (R.KeyExists(SubKey)) then
    begin
      With R do
      begin
        Access := KEY_WRITE OR $0100;
        openResult := OpenKey(SubKey, False);
        if (not openResult = True) Then
        begin
          MessageDlg('Unable to create key! Exiting.', mtError, mbOKCancel, 0);
        end;


Далее пишем в реестр параметры LastLoggedOnSAMUser, LastLoggedOnUser и закрываем ветку реестра и освобождаем память. Следующие строчки:

        WriteString('LastLoggedOnSAMUser', strSetRegValue);
        WriteString('LastLoggedOnUser', strSetRegValue);

        CloseKey();
        Free;


Ниже показан снимок рабочей программы (Смотрите рисунок 5) и код полностью. При запуске приложения, оно спросит повышения привилегий, если вы имеете права админа (Смотрите рисунок 6) или повышения привилегий путем ввода логина и пароля администратора (Смотрите рисунок 7).

Рисунок 5. Запущенная программа

Рисунок 6. Окно разрешения запуска вашей программы, если вы имеете права администратора

Рисунок 7. Запрос прав администратора, если они у вас отсутствуют

unit p12_unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Registry;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  strSetRegValue: String;

procedure TForm1.Button1Click(Sender: TObject);
var
  R: TRegistry;
  openResult: Boolean;
const
  SubKey : String = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI';

begin
  strSetRegValue := ComboBox1.Text;
  if (strSetRegValue <> '') then
  begin
    R := TRegistry.Create(KEY_READ);
    R.RootKey := HKEY_LOCAL_MACHINE;
    if (R.KeyExists(SubKey)) then
    begin
      With R do
      begin
        Access := KEY_WRITE OR $0100;
        openResult := OpenKey(SubKey, False);
        if (not openResult = True) Then
        begin
          MessageDlg('Unable to create key! Exiting.', mtError, mbOKCancel, 0);
        end;
        WriteString('LastLoggedOnSAMUser', strSetRegValue);
        WriteString('LastLoggedOnUser', strSetRegValue);

        CloseKey();
        Free;
      end;
    end;
    ShowMessage('Done! Recorded in the registry.');
    strSetRegValue := '';
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Combobox1.ItemIndex := Combobox1.Items.IndexOf('DOMAIN\User1');
end;

end.

четверг, 16 мая 2019 г.

Перезагрузка компьютера при подключении компьютера к сети или при выборе типа сети под Windows 7 32-64

Несколько раз сталкивался с такой проблемой, что при подключении компьютера к сети или при выборе типа сети «Сеть предприятия» в окне «Настройка сетевого размещения» (Смотрите рисунок 1) компьютер (под управлением Windows 7 32bit и Windows 7 64bit) уходит в перезагрузку.

Рисунок 1. Выбор типа сети в Windows 7

Методом проб и ошибок удалось выяснить, что проблема связана с включённым DEP в Windows 7 или включенным DEP в BIOS компьютера. По крайней мере после отключения DEP в Windows 7 проблема пропала.

Чтобы отключить DEP под управлением Windows 7, то необходимо открыть командную строку от имени администратора и выполнить команду:

bcdedit.exe /set {current} nx AlwaysOff

Когда команда выполнится, то появится сообщение, что «Операция успешно выполнена».  Далее необходимо перезагрузить компьютер.

Чтобы убедится, что DEP отключен, то необходимо:
1. Открыть «Свойства системы»
2. Выбрать пункт «Дополнительные параметры системы»
3. На вкладке «Производительность» нажать кнопку «Настройка»
4. На вкладке «Предотвращение выполнение данных» убедится, что включение DEP запрещена (Смотрите рисунок 2).

Рисунок 2. Отключенный DEP

Если вам понадобится включить DEP, то запустите опять командную строку от имени администратора и выполните следующую команду:

bcdedit.exe /set {current} nx OptIn

Когда команда выполнится, то появится сообщение, что «Операция успешно выполнена».  Далее необходимо перезагрузить компьютер.

Что такое DEP и зачем он нужен можно почитать в Википедии (https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BE%D1%82%D0%B2%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85).
Команды на отключения и включения взяты из статьи по ссылке (http://netler.ru/ikt/windows7-dep.htm).


Папки в Outlook отображаются на английском языке

В том случае если вы обновили Microsoft Office на более новую версию и при открытие Outlook папки отображаются на английском языке, то необходимо в командной строке перейти в папку, где у вас расположен файл outlook.exe. Для этого выполните следующую команду:

cd /d C:\Program Files\Microsoft Office\root\Office16 

Теперь из командной строки запустите outlook.exe c параметром resetfoldernames, а потом с параметром resetfolders.

outlook.exe /resetfoldernames

outlook.exe /resetfolders

Перезапустите Outlook и проверьте правильно ли отображаются имена папок в Outlook.

Идеи взяты с сайта https://www.dmosk.ru/polezno.php?review=outlook-en

Использование VBScript’s в проектах Delphi

Внимание! Проект создавался в среде программирование Delphi 7 и в операционной системе Windows 7 64 bit.

1. Зачем это нужно? Язык VBScript широко используется для администрирования операционных систем семейства Windows. Delphi в этом плане более ограничена.

2. Например, если вы не можете получить какой-нибудь результат или какую-нибудь информацию от Windows средствами Delphi, то возможно это сможет VBScript.

3. Таким образом наша задача состоит в том, чтобы под средством VBScript получить какую-то информацию в виде строки, передать эту строку в приложение Delphi и вывести результат.

4. Что мы будем проектировать? Не будем ничего выдумывать и напишем программу в Delphi, которая складывает два числа, вводимые нами с клавиатуры. В программу в Delphi мы вводим только два складываемых числа, эти числа передаются VBScript-скрипту. Скрипт их суммирует и результат сложения передает назад в приложение Delphi.

5. С постановкой задачи все. Самое важное, что нам необходимо сделать это установить и подключить компонент, который занимается запуском VBScript-скрипта, приемом и передачей параметров в скрипт и из него.

6. Чтобы установить компонент необходима выбрать пункт меню Component -> Import ActiveX Control (Смотрите рисунок 1).

Рисунок 1. Открытие окна выбора компонента для установки

В списке компонентов найти и выбрать компонент «Microsoft Script Control 1.0» и нажать кнопку Install (Смотрите рисунок 2).

Рисунок 2. Выбор компонента для установки

В окне с именем Install нажать кнопку Ok (Смотрите рисунок 3).

Рисунок 3. Выбор пути установки

В окне Package нажать кнопку Install (Смотрите рисунок 4).

Рисунок 4. Установка компонента

После этого проверить, что компонент установился. Для этого выберите палитру компонентов ActiveX (Смотрите рисунок 5).

Рисунок 5. Просмотр установленного компонента

 7. Создайте новый проект. Для этого выберите пункт меню File -> New -> Application (Смотрите рисунок 6). 

Рисунок 6. Создание нового проекта в Delphi

Сохраните проект под именем, например, p16, как у меня. Перетащите на форму с именем Form1 одну кнопку Button1, два поля ввода Edit1 и Edit2, шесть текстовых меток c Label1 по Label6, и один компонент ScriptControl1. Расположите все элементы как у меня (Смотрите рисунок 7).

Рисунок 7. Расстановка элементов на форме

8. Перейдем к написанию кода приложения Delphi и VBScript-скрипта. Создайте в папке проекта с именем p16 под папку c именем vbscripts. Создайте в этой папке VBScript-скрипт файл с именем sum.vbs. Код скрипта будет следующий:

On Error Resume Next
Function Sum(a,b)
 Sum = a + b
End function

Таким образом скрипт состоит из команды On Error Resume Next, которая продолжает выполнять код даже если возникла какая-то ошибка, и функции с именем Sum, которая выполняет суммирование двух переменных и в качестве результата возвращает их сумму:

Function Sum(a,b)
Sum = a + b
End function

9. Теперь напишем код нашего приложения Delphi. Первым делом рассмотрим обработчик создание формы.

procedure TForm1.FormCreate(Sender: TObject);
var
  ScriptFile: TextFile;
  LineScript: String;
begin
  AssignFile(ScriptFile,'vbscripts/sum.vbs');
  Reset(ScriptFile);

  if IOResult <> 0 then
 begin
   MessageBox(0,'File access error.','Error',0);
  exit;
  end;

  while not EOF(ScriptFile) do
  begin
    readln(ScriptFile, LineScript);
    Script := Script + LineScript+#13+#10;
  end;

  CloseFile(ScriptFile);
end;

В представленном коде мы открываем наш скрипт файл sum.vbs, считываем построчно и сохраняем результат считывания в переменную Script типа String.

10. Далее рассмотрим код обработчика нажатия на кнопку Button1. Данный код выполняет передачу значений Edit1 и Edit2 скрипт файлу. Запуск скрипта на выполнение и получение результат выполнения скрипта.

procedure TForm1.Button1Click(Sender: TObject);
var
  varr, res:Variant;
  pPar:PSafeArray;
  SA : TSafeArrayBound;
  a: Integer;
  b: Integer;
  ValErrorCode: Integer;
begin
  Val(Edit1.Text, a, ValErrorCode);
  Val(Edit2.Text, b, ValErrorCode);

  try
    ScriptControl1.Language := 'VBScript';
    ScriptControl1.AddCode(Script);
    SA.cElements := 2;
    pPar := SafeArrayCreate(varVariant, 1, SA);
    varr := VarArrayCreate([0, 1], varVariant);
    varr[0]:=a;
    varr[1]:=b;
    pPar:=PSafeArray(TVarData(varr).VArray);
    res:=ScriptControl1.Run('Sum',pPar);
    Label5.Caption := VarToStr(res);
  except
    on E: Exception do
      MessageDlg(PWideChar(E.Message), mtError, [mbOK], 0);
  end;
end;

Далее рассмотрим код более подробно. В этих строчках кода мы берем значения полей ввода Edit1 и Edit2, и сохраняем эти значения в переменных a и b.

Val(Edit1.Text, a, ValErrorCode);
Val(Edit2.Text, b, ValErrorCode);

В следующей строчке кода мы указываем компоненту загрузки и выполнению скрипта, что нужно выполнить скрипт файл типа VBScript. 

ScriptControl1.Language := 'VBScript';

В следующей строчке кода мы указываем откуда загружать скрипт из переменной Script типа String.

ScriptControl1.AddCode(Script); 

Следующими строчками кода мы передаем складываемые значения a и b скрипту, и запускаем скрипт на исполнение, и получаем результат, который мы выводи в текстовую метку Label5.

SA.cElements := 2;
pPar := SafeArrayCreate(varVariant, 1, SA);
varr := VarArrayCreate([0, 1], varVariant);
varr[0]:=a;
varr[1]:=b;
pPar:=PSafeArray(TVarData(varr).VArray);
res:=ScriptControl1.Run('Sum',pPar);
Label5.Caption := VarToStr(res);

11. Вот как бы и все. Теперь можно ознакомится с работой программы (Смотрите рисунок 8).

Рисунок 8. Результат работы программы

Ниже представлен код полностью:

unit p16_unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, MSScriptControl_TLB;

type
  TForm1 = class(TForm)
    ScriptControl1: TScriptControl;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    Label5: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
var
  Script: String;

implementation

{$R *.dfm}

uses ActiveX;

procedure TForm1.FormCreate(Sender: TObject);
var
  ScriptFile: TextFile;
  LineScript: String;
begin
  AssignFile(ScriptFile,'vbscripts/sum.vbs');
  Reset(ScriptFile);

  if IOResult <> 0 then
 begin
   MessageBox(0,'File access error.','Error',0);
  exit;
  end;

  while not EOF(ScriptFile) do
  begin
    readln(ScriptFile, LineScript);
    Script := Script + LineScript+#13+#10;
  end;

  CloseFile(ScriptFile);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  varr, res:Variant;
  pPar:PSafeArray;
  SA : TSafeArrayBound;
  a: Integer;
  b: Integer;
  ValErrorCode: Integer;
begin
  Val(Edit1.Text, a, ValErrorCode);
  Val(Edit2.Text, b, ValErrorCode);

  try
    ScriptControl1.Language := 'VBScript';
    ScriptControl1.AddCode(Script);
    SA.cElements := 2;
    pPar := SafeArrayCreate(varVariant, 1, SA);
    varr := VarArrayCreate([0, 1], varVariant);
    varr[0]:=a;
    varr[1]:=b;
    pPar:=PSafeArray(TVarData(varr).VArray);
    res:=ScriptControl1.Run('Sum',pPar);
    Label5.Caption := VarToStr(res);
  except
    on E: Exception do
      MessageDlg(PWideChar(E.Message), mtError, [mbOK], 0);
  end;
end;

end.

Скрипт sum.vbs:

On Error Resume Next

Function Sum(a,b)
 Sum = a + b
End function

вторник, 19 марта 2019 г.

Не удается запустить приложение Microsoft Outlook. Невозможно открыть окно Outlook. Невозможно открыть набор папок. Не удается открыть банк сообщений.

Проблема проявилась с Office 2016 Home&Business под управлением Windows 7. Outlook не под каким предлогом не хотел открываться, каждый раз выдавая неинформативное сообщение (Смотрите рисунок 1), что «Не удается запустить приложение Microsoft Outlook. Невозможно открыть окно Outlook. Невозможно открыть набор папок. Не удается открыть банк сообщений.»

Рисунок 1. Сообщение об ошибке

Для попытки восстановления работоспособности были выполнены следующие неэффективные действие:

- Пытался удалить почтовый профиль
- Пытался запустить Outlook в безопасном режиме
- Удалить папки Outlook в [Профиль пользователя]\AppData\Local\Microsoft\, [Профиль пользователя]\AppData\Roaming\Microsoft\

После этого пришлось прибегнуть к радикальным мерам, полностью удалению профиля пользователя в Windows 7.  После этого проблема исчезла, и почта стала открываться. Перед тем как удалить профиль пользователя в Windows 7, полностью скопируйте все важные данные профиля. Для удаления профиля пользователя в Windows 7 откройте Панель управления, выберите опцию «Система». В окне «Система» выберите опцию «Дополнительные параметры системы». В окне Свойства системы на вкладке «Дополнительно» в разделе «Профили пользователей» нажмите на кнопку «Параметры…». В окне «Профили пользователей» выберите профиль какой хотите удалить и нажмите кнопку «Удалить» (Смотрите рисунок 2). 

 Рисунок 2. Удаление профиля пользователя