Подборка "скриптовых" функций и процедур.
Работа с реестром.
Предыдущие:
1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть I: //infostart.ru/public/165702/
1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть II: //infostart.ru/public/166391/
Практическая реализация:
Обработка 1С:Системный Администратор (WSH&WMI): //infostart.ru/public/172189/
ТЕОРИЯ
Microsoft Windows Script Host (WSH) — сервер сценариев Windows.
Используется в качестве инструмента разработки и выполнения специальных сценариев для операционной системы Windows.
Сценарии WSH пишутся на специализированных языках: Microsoft Visual Basic Script Edition (VBScript) или Microsoft JScript.
Свойства и методы объектов Microsoft WSH доступны также в приложениях, способных выступить в роли OLE-клиента.
WSH позволяет работать с:
— Файловой системой;
— Ресурсами локальной сети;
— Реестром;
— Специальными папками и ярлыками Windows;
— Процессами. Запускать и контролировать их выполнение.
WSH позволяет взаимодействовать с Microsoft ActiveX:
— ActiveX Data Object (ADO) — Доступ к базам данных;
— Active Directory Service Interface (ADSI) — Службы каталогов;
— Windows Management Instrumentation (WMI) — Инструментарий управления Windows.
Подробно свойства и методы объектов MS Windows Script Host изложены в файле Automation.chm, доступном в ссылках на скачивание.
Windows Management Instrumentation (WMI) — инструментарий управления Windows.
WMI — это одна из базовых технологий для централизованного наблюдения и управления компьютерной инфраструктуры под управлением платформы Windows.
WMI – это расширенная и адаптированная компанией Microsoft реализация стандарта WBEM (WebBased Enterprise Management) компании DMTF Inc.
Основа WBEM — Common Information Model (CIM), реализующая объектно-ориентированный подход к представлению компонентов системы.
WMI позволяет работать с:
— Системой;
— Приложениями;
— Оборудованием;
— Сетями;
др. управляемыми компонентами.
Подробно о Windows Management Instrumentation (англ.): http://msdn.microsoft.com/en-us/library/windows/desktop/aa394572%28v=vs.85%29.aspx
ПРАКТИКА
// Корневые ключи реестра и их сокращения:
// HKEY_CURRENT_USER — HKCU
// HKEY_LOCAL_MACHINE — HKLM
// HKEY_CLASSES_ROOT — HKCR
// HKEY_USERS — HKEY_USERS
// HKEY_CURRENT_CONFIG — HKEY_CURRENT_CONFIG
Список процедур и функций:— ЗарегистрироватьФайлDLL() — Ф., позволяющая зарегистрировать файл типа DLL.— УстановленаПрограмма() — Ф., позволяющая проверить установлена/не установлена программа.— Computer_Programs_Product() — Ф., позволяющая получить информацию об установленных программах лок./уд. компьютере (WMI).— Computer_Programs_Registry() — Ф., позволяющая получить информацию об установленных программах лок./уд. компьютере (REGISTRY).— ИзменитьСтартовуюСтраницуInternetExplorer() — Ф., позволяющая изменить стартовую страницу Internet Explorer лок. компьютера.— RegRead() — Ф. чтения значения ключа или группы из системного реестра.— RegWrite() — Ф. создания в системном реестре ключа или группы.— RegDelete() — Ф. удаления ключа или группы из системного реестра.— Computer_RegistryInformation() — Ф., позволяющая получить информацию о реестре лок./уд. компьютера, в т.ч. дату установки Windows.— Computer_Description() — Ф., позволяющая записать в описание лок./уд. компьютера имя доменапользователя, работающего на нем.— WindowsInfo() — Ф., позволяющая получить информацию об установленной Windows на лок. компьютере.— get_windows_key_via_reg_wmi.vbs. VBS-Срипт. Получение серийного номера Windows.
// Функция, позволяющая зарегистрировать файл типа DLL.
//
// ВАЖНО:
//
// Windows User Account Control (UAC) в ОС Vista и выше
// может помешать регистрации DLL.
//
// В этом случае необходимо:
// Вручную зарегистрировать фалй от имени «Администратора»:
// «C:Documents and SettingsAll Users1С_COMObjectX.DLL»
// Отключать UAC не рекомендуется.
//
// Возвращает:
// В случае успеха — COMОбъект.
// Иначе — Неопределено.
// Параметры:
// ИмяКаталогаDLL — Относительно переменной среды %ALLUSERSPROFILE%.
// ИмяФайлаDLL — Короткое имя файла DLL.
// ИмяМакетаDLL — Имя двоичного макета объекта, в котором находится файл DLL.
// ИмяCOMОбъекта — Имя создаваемого COMОбъекта.
//
&НаСервере
Функция ЗарегистрироватьФайлDLL(ИмяКаталогаDLL = «1С_COMObject» , ИмяФайлаDLL = «X.DLL», ИмяМакетаDLL = «XY», ИмяCOMОбъекта = «XYZ»)
ЭтотОбъект = РеквизитФормыВЗначение(«Объект»);
ALLUSERSPROFILE = Неопределено;
Попытка
WshShell = Новый COMОбъект(«WScript.Shell»);
WshSysEnv = WshShell.Environment(«Process»);
ALLUSERSPROFILE = WshSysEnv.Item(«ALLUSERSPROFILE»);
Исключение
Сообщить(НСтр(«ru = ‘»+ОписаниеОшибки()+«‘»), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
КаталогDLL = Новый Файл(ALLUSERSPROFILE + «» + ИмяКаталогаDLL);
Если НЕ КаталогDLL.Существует() Тогда
Попытка
СоздатьКаталог(КаталогDLL.ПолноеИмя);
Исключение
Сообщить(НСтр(«ru = ‘»+ОписаниеОшибки()+«‘»), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
КонецЕсли;
ИмяФайлаDLL = КаталогDLL.ПолноеИмя + «» + ИмяФайлаDLL;
ФайлDLL = Новый Файл(ИмяФайлаDLL);
Если НЕ ФайлDLL.Существует() Тогда
Попытка
МакетDLL = ЭтотОбъект.ПолучитьМакет(ИмяМакетаDLL);
МакетDLL.Записать(ФайлDLL.ПолноеИмя);
Исключение
Сообщить(НСтр(«ru = ‘»+ОписаниеОшибки()+«‘»), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
КонецЕсли;
Попытка
// «/s» — «тихий» режим REGsvr32: Окна сообщений не отображаются.
// 0 — Без окна WshShell.
// Истина — Дождаться завершения.
WshShell = Новый COMОбъект(«WScript.Shell»);
WshShell.Run(«REGsvr32 /s « + ИмяФайлаDLL, 0, Истина);
Исключение
//Сообщить(НСтр(«ru = ‘»+ОписаниеОшибки()+»‘»), СтатусСообщения.Внимание);
ЗапуститьПриложение(«REGsvr32 /s « + ИмяФайлаDLL, , Истина);
КонецПопытки;
// Проверка регистрации.
НовыйCOMОбъект = ПолучитьНовыйCOMОбъект(ИмяCOMОбъекта);
Возврат НовыйCOMОбъект;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьНовыйCOMОбъект(ИмяCOMОбъекта)
Попытка
НовыйCOMОбъект = Новый COMОбъект(ИмяCOMОбъекта);
Возврат НовыйCOMОбъект;
Исключение
Возврат Неопределено;
КонецПопытки;
Возврат Неопределено;
КонецФункции
// Функция, позволяющая проверить установлена/не установлена программа.
// Проверяет путь в системном реестре и существование запускаемого файла для программы,
// установку которой на компьютере необходимо проверить.
// Используется функция GetFileInfo, описанная в Части II.
//
&НаКлиентеНаСервереБезКонтекста
Функция УстановленаПрограмма(Программа = «LibreOffice»)
Файл = Неопределено;
Если Программа = «LibreOffice» Тогда
Файл = RegRead(«HKLMSoftwareLibreOfficeLibreOffice3.6Path»);
Иначе
// Файл = …
КонецЕсли;
Если Файл = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
ПрограммаЗапуска = GetFileInfo(Файл);
Если НЕ ПрограммаЗапуска = Неопределено Тогда
// … Дополнительная проверка при необходимости имени, размера, ….
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
// Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
// Параметры:
// Computer — Имя компьютера.
// Возвращаемое значение:
// Таблица значений.
//
// Примечания:
// 1. Только программы, установленные с помощью Windows Installer.
// 2. Полнота информации в Windows 2000/XP/2003 ограничена.
// 3. Может не работать на 64-битных ОС.
// 4. Медленнее чтения из регистра.
//
// При запуске на на компьютере под управлением Windows Server 2003 возможна ошибка чтения данных,
// т.к. поставщик объекта Win32_Product по умолчанию в Windows Server 2003 не устаналивается.
// Установка:
// Панель управления — Установка и уделение программ — Установка компонентов Windows — Средства наблюдения и управления:
// Компонента: «Поставщик установщика Windows через WMI».
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста
Функция Computer_Programs_Product(Computer = «.»)
Win32_ProductInfo = Новый ТаблицаЗначений;
Win32_ProductInfo.Колонки.Добавить(«Caption»);
Win32_ProductInfo.Колонки.Добавить(«Description»);
Win32_ProductInfo.Колонки.Добавить(«HelpLink»);
Win32_ProductInfo.Колонки.Добавить(«HelpTelephone»);
Win32_ProductInfo.Колонки.Добавить(«IdentifyingNumber»);
Win32_ProductInfo.Колонки.Добавить(«InstallDate»);
Win32_ProductInfo.Колонки.Добавить(«InstallLocation»);
Win32_ProductInfo.Колонки.Добавить(«InstallSource»);
Win32_ProductInfo.Колонки.Добавить(«InstallState»);
Win32_ProductInfo.Колонки.Добавить(«Language»);
Win32_ProductInfo.Колонки.Добавить(«LocalPackage»);
Win32_ProductInfo.Колонки.Добавить(«Name»);
Win32_ProductInfo.Колонки.Добавить(«PackageCache»);
Win32_ProductInfo.Колонки.Добавить(«PackageCode»);
Win32_ProductInfo.Колонки.Добавить(«PackageName»);
Win32_ProductInfo.Колонки.Добавить(«ProductID»);
Win32_ProductInfo.Колонки.Добавить(«RegCompany»);
Win32_ProductInfo.Колонки.Добавить(«RegOwner»);
Win32_ProductInfo.Колонки.Добавить(«SKUNumber»);
Win32_ProductInfo.Колонки.Добавить(«Transforms»);
Win32_ProductInfo.Колонки.Добавить(«URLInfoAbout»);
Win32_ProductInfo.Колонки.Добавить(«URLUpdateInfo»);
Win32_ProductInfo.Колонки.Добавить(«Vendor»);
Win32_ProductInfo.Колонки.Добавить(«Version»);
Попытка
WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootcimv2″);
Win32_Product = WinMGMT.ExecQuery(«SELECT * FROM Win32_Product»);
Для Каждого Product ИЗ Win32_Product Цикл
ProductInfo = Win32_ProductInfo.Добавить();
ProductInfo.Caption = ПолучитьЗначениеВПопытке(Product, «Caption»);
ProductInfo.Description = ПолучитьЗначениеВПопытке(Product, «Description»);
ProductInfo.HelpLink = ПолучитьЗначениеВПопытке(Product, «HelpLink»);
ProductInfo.HelpTelephone = ПолучитьЗначениеВПопытке(Product, «HelpTelephone»);
ProductInfo.IdentifyingNumber = ПолучитьЗначениеВПопытке(Product, «IdentifyingNumber»);
InstallDate = ПолучитьЗначениеВПопытке(Product, «InstallDate»);
Попытка
ProductInfo.InstallDate = Дата(Лев(InstallDate,8));
Исключение
ProductInfo.InstallDate = InstallDate;
КонецПопытки;
ProductInfo.InstallLocation = ПолучитьЗначениеВПопытке(Product, «InstallLocation»);
ProductInfo.InstallSource = ПолучитьЗначениеВПопытке(Product, «InstallSource»);
InstallState = ПолучитьЗначениеВПопытке(Product, «InstallState»);
Если InstallState = —6 Тогда
ProductInfo.InstallState = «Bad Configuration»;
ИначеЕсли InstallState = —2 Тогда
ProductInfo.InstallState = «Invalid Argument»;
ИначеЕсли InstallState = —1 Тогда
ProductInfo.InstallState = «Unknown Package»;
ИначеЕсли InstallState = 1 Тогда
ProductInfo.InstallState = «Advertised»;
ИначеЕсли InstallState = 2 Тогда
ProductInfo.InstallState = «Absent»;
ИначеЕсли InstallState = 5 Тогда
ProductInfo.InstallState = «Installed»;
Иначе
ProductInfo.InstallState = «Invalid State»;
КонецЕсли;
Language = ПолучитьЗначениеВПопытке(Product, «Language»);
Если Language = «1033» Тогда
ProductInfo.Language = «Английский»;
ИначеЕсли Language = «1049» Тогда
ProductInfo.Language = «Русский»;
ИначеЕсли Language = «0» Тогда
ProductInfo.Language = «»;
Иначе
ProductInfo.Language = Language;
КонецЕсли;
ProductInfo.LocalPackage = ПолучитьЗначениеВПопытке(Product, «LocalPackage»);
ProductInfo.Name = ПолучитьЗначениеВПопытке(Product, «Name»);
ProductInfo.PackageCache = ПолучитьЗначениеВПопытке(Product, «PackageCache»);
ProductInfo.PackageCode = ПолучитьЗначениеВПопытке(Product, «PackageCode»);
ProductInfo.PackageName = ПолучитьЗначениеВПопытке(Product, «PackageName»);
ProductInfo.ProductID = ПолучитьЗначениеВПопытке(Product, «ProductID»);
ProductInfo.RegCompany = ПолучитьЗначениеВПопытке(Product, «RegCompany»);
ProductInfo.RegOwner = ПолучитьЗначениеВПопытке(Product, «RegOwner»);
ProductInfo.SKUNumber = ПолучитьЗначениеВПопытке(Product, «SKUNumber»);
ProductInfo.Transforms = ПолучитьЗначениеВПопытке(Product, «Transforms»);
ProductInfo.URLInfoAbout = ПолучитьЗначениеВПопытке(Product, «URLInfoAbout»);
ProductInfo.URLUpdateInfo = ПолучитьЗначениеВПопытке(Product, «URLUpdateInfo»);
ProductInfo.Vendor = ПолучитьЗначениеВПопытке(Product, «Vendor»);
ProductInfo.Version = ПолучитьЗначениеВПопытке(Product, «Version»);
КонецЦикла;
Исключение
КонецПопытки;
Win32_ProductInfo.Сортировать(«Name»);
Возврат Win32_ProductInfo;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьЗначениеВПопытке(хОбъект, хРеквизит)
Попытка
Возврат хОбъект[хРеквизит];
Исключение
Возврат Неопределено;
КонецПопытки;
Возврат Неопределено;
КонецФункции
// Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
// Параметры:
// Computer — Имя компьютера.
// Возвращаемое значение:
// Таблица значений.
//
// Примечания:
// 1. Полнота информации [в сравнении с функцией Computer_Programs_Product()]:
// — Количество программ больше, т.к. нет ограничения на «Только программы, установленные с помощью Windows Installer».
// — Количество данных о конкретной программе меньше, но основная информация доступна.
// 2. Поддержка 64-битных ОС (из-за отсутствия 64-битной Windows — не проверялось).
// 3. Быстрее, чем при использовании WMI: («SELECT * FROM Win32_Product»).
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста
Функция Computer_Programs_Registry(Computer = «.»)
Win32_ProductInfo = Новый ТаблицаЗначений;
Win32_ProductInfo.Колонки.Добавить(«Caption»);
Win32_ProductInfo.Колонки.Добавить(«Description»);
Win32_ProductInfo.Колонки.Добавить(«HelpLink»);
Win32_ProductInfo.Колонки.Добавить(«HelpTelephone»);
Win32_ProductInfo.Колонки.Добавить(«IdentifyingNumber»);
Win32_ProductInfo.Колонки.Добавить(«InstallDate»);
Win32_ProductInfo.Колонки.Добавить(«InstallLocation»);
Win32_ProductInfo.Колонки.Добавить(«InstallSource»);
Win32_ProductInfo.Колонки.Добавить(«InstallState»);
Win32_ProductInfo.Колонки.Добавить(«Language»);
Win32_ProductInfo.Колонки.Добавить(«LocalPackage»);
Win32_ProductInfo.Колонки.Добавить(«Name»);
Win32_ProductInfo.Колонки.Добавить(«PackageCache»);
Win32_ProductInfo.Колонки.Добавить(«PackageCode»);
Win32_ProductInfo.Колонки.Добавить(«PackageName»);
Win32_ProductInfo.Колонки.Добавить(«ProductID»);
Win32_ProductInfo.Колонки.Добавить(«RegCompany»);
Win32_ProductInfo.Колонки.Добавить(«RegOwner»);
Win32_ProductInfo.Колонки.Добавить(«SKUNumber»);
Win32_ProductInfo.Колонки.Добавить(«Transforms»);
Win32_ProductInfo.Колонки.Добавить(«URLInfoAbout»);
Win32_ProductInfo.Колонки.Добавить(«URLUpdateInfo»);
Win32_ProductInfo.Колонки.Добавить(«Vendor»);
Win32_ProductInfo.Колонки.Добавить(«Version»);
Попытка
WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootdefault:StdRegProv»);
HKCU = 2147483649;
HKLM = 2147483650;
HKCUPath = «SOFTWAREMicrosoftWindowsCurrentVersionUninstall»;
HKLMPath32 = «SOFTWAREMicrosoftWindowsCurrentVersionUninstall»;
HKLMPath64 = «SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall»;
Computer_Programs_Registry_Key(WinMGMT, HKCU, HKCUPath , Win32_ProductInfo);
Computer_Programs_Registry_Key(WinMGMT, HKLM, HKLMPath32, Win32_ProductInfo);
Computer_Programs_Registry_Key(WinMGMT, HKLM, HKLMPath64, Win32_ProductInfo);
Исключение
КонецПопытки;
Win32_ProductInfo.Сортировать(«Name»);
Возврат Win32_ProductInfo;
КонецФункции
&НаСервереБезКонтекста
Функция Computer_Programs_Registry_Key(WinMGMT, HK, HKPath, Win32_ProductInfo)
Win32_Product = Новый Массив;
Попытка
WinMGMT.EnumKey(HK, HKPath, Win32_Product);
Если Win32_Product = NULL Тогда
Возврат Неопределено;
КонецЕсли;
Исключение
Возврат Неопределено;
КонецПопытки;
Для Каждого Product ИЗ Win32_Product Цикл
Name = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «DisplayName»);
Version = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «DisplayVersion»);
ProductID = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «ProductGuid»);
ParentName = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «ParentDisplayName»);
NameString = Win32_ProductInfo.Найти(Name, «Name»);
Если Name = Неопределено ИЛИ (НЕ NameString = Неопределено И NameString.Version = Version) Тогда
Продолжить;
КонецЕсли;
ProductInfo = Win32_ProductInfo.Добавить();
ProductInfo.Caption = Name;
ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «Description»);
Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «Comments»);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «Readme»);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
ProductInfo.Description = Name;
КонецЕсли;
ProductInfo.HelpLink = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «HelpLink»);
ProductInfo.HelpTelephone = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «HelpTelephone»);
Если НЕ ЗначениеЗаполнено(ProductID) Тогда
IdentifyingNumber = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «UninstallString»);
Если НЕ ЗначениеЗаполнено(IdentifyingNumber) Тогда
IdentifyingNumber = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «ModifyPath»);
КонецЕсли;
Если ЗначениеЗаполнено(IdentifyingNumber) Тогда
ПозицияЛевойСкобки = Найти(IdentifyingNumber, «{«);
ПозицияПравойСкобки = Найти(IdentifyingNumber, «}»);
Если ПозицияЛевойСкобки > 0 И ПозицияПравойСкобки > 0 Тогда
ProductInfo.IdentifyingNumber = Сред(IdentifyingNumber, ПозицияЛевойСкобки, ПозицияПравойСкобки—ПозицияЛевойСкобки+1);
КонецЕсли;
КонецЕсли;
Иначе
ProductInfo.IdentifyingNumber = ProductID;
КонецЕсли;
InstallDate = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «InstallDate»);
Попытка
ProductInfo.InstallDate = Дата(Лев(InstallDate,8));
Исключение
ProductInfo.InstallDate = InstallDate;
КонецПопытки;
ProductInfo.InstallLocation = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «InstallLocation»);
ProductInfo.InstallSource = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «InstallSource»);
ProductInfo.InstallState = Неопределено;
ProductInfo.Language = Неопределено;
ProductInfo.LocalPackage = Неопределено;
ProductInfo.Name = Name;
ProductInfo.PackageCache = Неопределено;
ProductInfo.PackageCode = Неопределено;
ProductInfo.PackageName = Неопределено;
ProductInfo.ProductID = ProductID;
ProductInfo.RegCompany = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «RegCompany»);
ProductInfo.RegOwner = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «RegOwner»);
ProductInfo.SKUNumber = Неопределено;
ProductInfo.Transforms = Неопределено;
ProductInfo.URLInfoAbout = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «URLInfoAbout»);
ProductInfo.URLUpdateInfo = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «URLUpdateInfo»);
ProductInfo.Vendor = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, «Publisher»);
ProductInfo.Version = Version;
КонецЦикла;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKXXPath, Win32_ProductInfo, Product, KeyName)
Попытка
Value = Неопределено;
WinMGMT.GetStringValue(HK, HKXXPath + Product, KeyName, Value);
Если Value = NULL ИЛИ СтрДлина(Value) = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Value;
КонецЕсли;
Исключение
Возврат Неопределено;
КонецПопытки;
Возврат Неопределено;
КонецФункции
// Функция, позволяющая изменить стартовую страницу Internet Explorer локального компьютера.
// Для бухгалтеров — одно, для менеджеров — другое, …
//
&НаКлиентеНаСервереБезКонтекста
Функция ИзменитьСтартовуюСтраницуInternetExplorer(НоваяСтраница)
ТекущаяСтраница = RegRead(«HKCUSOFTWAREMicrosoftInternet ExplorerMainStart Page»);
Сообщить(«Предыдущая стартовая страница IE: « + ТекущаяСтраница);
RegWrite(«HKCUSOFTWAREMicrosoftInternet ExplorerMainStart Page», НоваяСтраница, «REG_SZ»);
ТекущаяСтраница = RegRead(«HKCUSOFTWAREMicrosoftInternet ExplorerMainStart Page»);
Сообщить(«Новая стартовая страница IE: « + ТекущаяСтраница);
КонецФункции
// Функция чтения значения ключа или группы из системного реестра.
// Возвращаемые значения типа:
// REG_SZ — строка.
// REG_DWORD — целое число.
// REG_BINARY — массив целый чисел
// REG_EXPAND_SZ — строка.
// REG_MULTI_SZ — массив строк.
&НаКлиентеНаСервереБезКонтекста
Функция RegRead(Путь = «HKLMSoftwareNokia»)
Значение = Неопределено;
Попытка
WshShell = Новый COMОбъект(«WScript.Shell»);
Значение = WshShell.RegRead(Путь);
Исключение
КонецПопытки;
Возврат Значение;
КонецФункции
// Функция создания в системном реестре ключа или группы.
//
&НаКлиентеНаСервереБезКонтекста
Функция RegWrite(Путь = «HKLMSoftwareNokia», Ключ = «Nokia_», Тип = «REG_SZ»)
Значение = Неопределено;
Попытка
WshShell = Новый COMОбъект(«WScript.Shell»);
WshShell.RegWrite(Путь, Ключ, Тип);
Значение = WshShell.RegRead(Путь);
Исключение
КонецПопытки;
Если НЕ Значение = Неопределено Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
// Функция удаления ключа или группы из системного реестра.
//
&НаКлиентеНаСервереБезКонтекста
Функция RegDelete(Путь = Неопределено)
Если Путь = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Значение = Неопределено;
Попытка
WshShell = Новый COMОбъект(«WScript.Shell»);
WshShell.RegDelete(Путь);
Значение = WshShell.RegRead(Путь);
Исключение
КонецПопытки;
Если Значение = Неопределено Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
// Функция, позволяющая получить информацию о реестре локального/удаленного компьютера, в т.ч. дату установки Windows.
// Параметры:
// Computer — Имя компьютера.
// Возвращаемое значение:
// Структура.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста
Функция Computer_RegistryInformation(Computer = «.»)
WinRegistryInfo = Новый Структура(«Name,Description,InstallDate,CurrentSize,MaximumSize»);
Попытка
WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootcimv2″);
Win32_Registry = WinMGMT.ExecQuery(«SELECT * FROM Win32_Registry»);
Для Каждого Registry ИЗ Win32_Registry Цикл
WinRegistryInfo.Name = Registry.Name;
WinRegistryInfo.Description = Registry.Description;
// Дата установки Windows.
Попытка
WinRegistryInfo.InstallDate = Дата(Лев(Registry.InstallDate,14));
Исключение
КонецПопытки;
WinRegistryInfo.CurrentSize = Registry.CurrentSize;
WinRegistryInfo.MaximumSize = Registry.MaximumSize;
КонецЦикла;
Исключение
КонецПопытки;
Возврат WinRegistryInfo;
КонецФункции
// Функция, позволяющая записать в описание локального/удаленного компьютера имя доменапользователя, работающего на нем.
// Описание компьютера отображается в качестве комментария в сетевом окружении.
// Изменяет параметр реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameterssrvcomment
// Применено WMI, т.к.:
// Изменения параметра в реестре требует перезагрузки компьютера для вступления в силу изменения,
// а при использовании WMI — изменения сразу вступают в силу.
//
// Параметры:
// Computer — Имя компьютера.
// Возвращаемое значение:
// Нет.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста
Функция Computer_Description(Computer = «.»)
Попытка
WinMGMT = ПолучитьCOMОбъект(«winmgmts:\» + Computer + »
ootcimv2″);
Win32_ComputerSystem = WinMGMT.ExecQuery(«SELECT * FROM Win32_ComputerSystem»);
Для Каждого ComputerSystem ИЗ Win32_ComputerSystem Цикл
NewDescription = ComputerSystem.UserName;
КонецЦикла;
Win32_OS = WinMGMT.InstancesOf(«Win32_OperatingSystem»);
Для Каждого OS ИЗ Win32_OS Цикл
OS.Description = NewDescription;
OS.Put_();
КонецЦикла;
Исключение
КонецПопытки;
КонецФункции
// Функция, позволяющая получить информацию об установленной Windows на локальном компьютере.
// Параметры:
// НЕТ.
// Возвращаемое значение:
// Структура.
//
&НаСервереБезКонтекста
Функция WindowsInfo()
Path = «HKLMSOFTWAREMicrosoftWindows NTCurrentVersion»;
WINInfo = Новый Структура(«BuildLab,CSDVersion,CurrentBuildNumber,CurrentVersion,ProductId,ProductName,RegisteredOrganization,RegisteredOwner,SystemRoot»);
Попытка
WshShell = Новый COMОбъект(«WScript.Shell»);
WINInfo.BuildLab = WshShell.RegRead(Path+«BuildLab»);
WINInfo.CSDVersion = WshShell.RegRead(Path+«CSDVersion»);
WINInfo.CurrentBuildNumber = WshShell.RegRead(Path+«CurrentBuildNumber»);
WINInfo.CurrentVersion = WshShell.RegRead(Path+«CurrentVersion»);
WINInfo.ProductId = WshShell.RegRead(Path+«ProductId»);
WINInfo.ProductName = WshShell.RegRead(Path+«ProductName»);
WINInfo.RegisteredOrganization = WshShell.RegRead(Path+«RegisteredOrganization»);
WINInfo.RegisteredOwner = WshShell.RegRead(Path+«RegisteredOwner»);
WINInfo.SystemRoot = WshShell.RegRead(Path+«SystemRoot»);
Исключение
КонецПопытки;
Возврат WINInfo;
КонецФункции
VBS-Срипт. Получение серийного номера Windows.
‘ Получение серийного номера Windows.
‘ Нижеследующий текст необходимо записать в файл, например с именем get_windows_key_via_reg_wmi.vbs
‘ Командная строка: get_windows_key_via_reg_wmi.vbs
‘ где — Имя удаленного компьютера.
‘ По-умолчанию (без параметра) скрипт выполняется относительно локального компьютера.
‘ Методы считывания: Утилита REG.EXE и WMI. Необходимые настройки.
‘ При считывании из реестра используется утилита REG.EXE.
‘ При этом на целевом (удаленном) компьютере должна быть запущена служба «Удаленный реестр».
‘ Если невозможно прочитать значение ключа удаленного реестра, используется WMI.
‘ При этом на целевом компьютере должен быть настроен WMI для удаленного доступа. см. подробности: //infostart.ru/public/172189
‘ Windows x32/x64. Особенности использования. Известные проблемы (условие: настройки произведены).
‘ Рекомендованный способ применения: Локально с правами администратора.
‘ Получение серийного номера удаленно.
‘ При удаленном получении серийного номера результат не всегда положительный.
‘ Исходный ПК x64, Целевой ПК x64 — результат положительный.
‘ Исходный ПК x64, Целевой ПК x32 — результат положительный.
‘ Исходный ПК x32, Целевой ПК x32 — результат положительный.
‘ Исходный ПК x32, Целевой ПК x64 — REG — отрицательный, WMI — положительный результат.
‘ Пояснение:
‘ При считывании из x32-Клиента в следствии отображения x64-Ключей на x32-Ключи происходит обращение к ветке реестра:
‘ HKLMSOFTWAREWOW6432NodeMicrosoftWindows NTCurrentVersionDigitalProductID
‘ Ключ DigitalProductID в разделе HKLMSOFTWAREWOW6432NodeMicrosoftWindows NTCurrentVersion по-умолчанию отсутствует.
‘ Примечание:
‘ Проверка существования компьютера в сети и его доступности не осуществляется.
On Error Resume Next
const HKLM = &H80000002
const KEY_QUERY_VALUE = &H1
Set WshShell = CreateObject(«WScript.Shell»)
Set WshArg = WScript.Arguments
If WshArg.Count > 0 Then
isLocalHost = FALSE
CompName = WshArg(0)
If CompName = «.» Then
isLocalHost = TRUE
CompName = WshShell.ExpandEnvironmentStrings(«%computername%»)
End If
Else
isLocalHost = TRUE
CompName = WshShell.ExpandEnvironmentStrings(«%computername%»)
End If
PathFile = WshShell.CurrentDirectory & «»
FileNameOUT = PathFile & «WinSKey_» & UCase(CompName) & «.txt»
Set FSO = CreateObject(«Scripting.FileSystemObject»)
Set objFileOUT = FSO.OpenTextFile(FileNameOUT, 2, TRUE)
objFileOUT.Write «PC: » & UCase(CompName) & vbNewLine
‘ Windows x64.
‘ При считывании из x32-Клиента в следствии отображения x64-Ключей на x32-Ключи происходит обращение к ветке реестра:
‘ HKLMSOFTWAREWOW6432NodeMicrosoftWindows NTCurrentVersionDigitalProductID
‘ Ключ DigitalProductID в разделе HKLMSOFTWAREWOW6432NodeMicrosoftWindows NTCurrentVersion по-умолчанию отсутствует.
If isLocalHost Then
‘ Извлечение данных из реестра на локальном компьютере.
sSubKeyName = «HKLMSOFTWAREMicrosoftWindows NTCurrentVersion»
ProductName = WshShell.RegRead(sSubKeyName & «ProductName»)
DigitalProductId = WshShell.RegRead(sSubKeyName & «DigitalProductId»)
WinProductSN = ConvertToKey(DigitalProductId)
objFileOUT.Write «OS: » & ProductName & vbNewLine
objFileOUT.Write «REG: » & WinProductSN & vbNewLine
Else
‘ На целевом (удаленном) компьютере должна быть запущена служба «Удаленный реестр».
sSubKeyName = «\» & CompName & «hklmsoftwaremicrosoftwindows ntcurrentversion»
ProductName = RegReadKey(sSubKeyName, «ProductName», FSO, PathFile, «EXEC-RUN»)
If NOT IsEmpty(ProductName) Then
objFileOUT.Write «OS: » & ProductName & vbNewLine
End If
DigitalProductId = RegReadKey(sSubKeyName, «DigitalProductID», FSO, PathFile, «EXEC-RUN»)
If IsEmpty(DigitalProductId) Then
ReadRegistry = FALSE
objFileOUT.Write «REG: Error read » & sSubKeyName & «DigitalProductId.» & vbNewLine
Else
ReadRegistry = TRUE
DigitalProductId = StringToArrayByte(DigitalProductId)
WinProductSN = ConvertToKey(DigitalProductId)
objFileOUT.Write «REG: » & WinProductSN & vbNewLine
End If
‘ На целевом компьютере должна быть настроен WMI для удаленного доступа. см. подробности: //infostart.ru/public/172189
Set WinMGMT = GetObject(«winmgmts:{impersonationLevel=impersonate}!\» & CompName & »
ootdefault:StdRegProv»)
If Err.Number <> 0 Then
objFileOUT.Write «WMI: Error= » & Err.Number & «: Error create WinMGMT. » & Err.Description & vbNewLine
objFileOUT.Close
WScript.Quit 1
End If
sSubKeyName = «SOFTWAREMicrosoftWindows NTCurrentVersion»
intRes = WinMGMT.CheckAccess(HKLM, sSubKeyName, KEY_QUERY_VALUE, bGranted)
If intRes <> 0 Then
objFileOUT.Write «WMI: Error=» & intRes & «: Failed verification of rights to read the » & sSubKeyName & vbNewLine
objFileOUT.Close
WScript.Quit 1
End If
If bGranted Then
If IsEmpty(ProductName) Then
intRes = WinMGMT.GetStringValue(HKLM, sSubKeyName, «ProductName», ProductName)
If IsEmpty(ProductName) Then
ProductName = «Windows-?»
Else
objFileOUT.Write «OS: » & ProductName & vbNewLine
End If
End If
intRes = WinMGMT.GetBinaryValue(HKLM, sSubKeyName, «DigitalProductId», DigitalProductId)
If intRes <> 0 Then
objFileOUT.Write «WMI: Error=» & intRes & «: Error read HKLM» & sSubKeyName & «DigitalProductId.» & vbNewLine
objFileOUT.Close
WScript.Quit 1
End If
Else
objFileOUT.Write «WMI: No permission to read the registry key HKLM» & sSubKeyName & vbNewLine
objFileOUT.Close
WScript.Quit 1
End If
WinProductSN = ConvertToKey(DigitalProductId)
objFileOUT.Write «WMI: » & WinProductSN & vbNewLine
End If
objFileOUT.Close
WScript.Quit 0
Function RegReadKey(sSubKeyName, sKeyName, FSO, PathFile, RunExec)
Dim ObjExec, FileTMP, objFileTMP, intRes, sOUT, IsBreak, ArrOUT, LineKEY, ArrKEY, i, KeyVALUE
FileTMP = PathFile & sKeyName & «.txt»
If RunExec = «EXEC» Then
Set ObjExec = WshShell.Exec(«%comspec% /c reg.exe query » & chr(34) & sSubKeyName & chr(34) & » /v » & sKeyName)
sOUT = NUL
IsBreak = FALSE
Do While TRUE ‘ Бесконечный цикл.
‘ Проверяем, достигнут ли конец выходного потока.
If (Not ObjExec.StdOut.AtEndOfStream) Then
‘ Считываем полностью выходной поток.
sOUT = sOUT + ObjExec.StdOut.ReadAll
End If
If IsBreak Then
Exit Do ‘ Выходим из цикла.
End If
‘ Проверяем, не завершилось ли выполнение команды.
If ObjExec.Status=1 Then
IsBreak = TRUE
Else
WScript.Sleep 100 ‘ Приостанавливаем сценарий на 0,1 сек.
End If
Loop
ArrOUT = Split(sOUT, vbCrLf) ‘ Формируем массив из выходного потока.
LineKEY = ArrOUT(2) ‘ Строка, содержащая ключ.
Else
intRes = WshShell.Run(«%comspec% /c reg.exe query » & chr(34) & sSubKeyName & chr(34) & » /v » & sKeyName & » > » & chr(34) & FileTMP & chr(34), 0, TRUE)
If intRes = 0 Then
Set objFileTMP = FSO.OpenTextFile(FileTMP, 1, TRUE)
objFileTMP.SkipLine
objFileTMP.SkipLine
lineKEY = objFileTMP.ReadLine ‘ Строка, содержащая ключ.
objFileTMP.Close
FSO.DeleteFile(FileTMP)
Else
FSO.DeleteFile(FileTMP)
RegReadKey = NUL
End If
End If
lineKEY = Trim(Replace(lineKEY, » «, » «))
ArrKEY = Split(lineKEY)
KeyVALUE = NUL
For i = 4 TO UBound(ArrKEY)
KeyVALUE = KeyVALUE & » » & ArrKEY(i)
Next
KeyVALUE = Trim(KeyVALUE)
RegReadKey = KeyVALUE
End Function
Function StringToArrayByte(byVal regKeySTR)
Dim newElem, strArr(164)
ii = -1
For i = 1 To Len(regKeySTR) Step 2
ii = ii+1
newElem = Mid(regKeySTR, i, 2)
strArr(ii) = StrToByte(newElem)
Next
StringToArrayByte = strArr
End Function
Function StrToByte(byval text)
Dim S1, S2, Value1, Value2
S1 = Mid(text, 1, 1)
S2 = Mid(text, 2, 1)
If S1 = «A» Then Value1 = 160 End If
If S1 = «B» Then Value1 = 176 End If
If S1 = «C» Then Value1 = 192 End If
If S1 = «D» Then Value1 = 208 End If
If S1 = «E» Then Value1 = 224 End If
If S1 = «F» Then Value1 = 240 End If
If S1 = «0» OR S1 = «1» OR S1 = «2» OR S1 = «3» OR S1 = «4» OR S1 = «5» OR S1 = «6» OR S1 = «7» OR S1 = «8» OR S1 = «9» Then Value1 = CInt(S1)*16#k8SjZc9Dxk1 End If
If S2 = «A» Then Value2 = 10 End If
If S2 = «B» Then Value2 = 11 End If
If S2 = «C» Then Value2 = 12 End If
If S2 = «D» Then Value2 = 13 End If
If S2 = «E» Then Value2 = 14 End If
If S2 = «F» Then Value2 = 15 End If
If S2 = «0» OR S2 = «1» OR S2 = «2» OR S2 = «3» OR S2 = «4» OR S2 = «5» OR S2 = «6» OR S2 = «7» OR S2 = «8» OR S2 = «9» Then Value2 = CInt(S2) End If
StrToByte = CByte(Value1+Value2)
End Function
Function ConvertToKey(regKeyHEX8)
Const KeyOffset = 52
isWin8 = (regKeyHEX8(66) 6) And 1
regKeyHEX8(66) = (regKeyHEX8(66) And &HF7) Or ((isWin8 And 2) * 4)
j = 24
Chars = «BCDFGHJKMPQRTVWXY2346789» ’24 Symbol used in the product keys, Windows and Office.
Do
Cur = 0
y = 14
Do
Cur = Cur * 256
Cur = regKeyHEX8(y + KeyOffset) + Cur
regKeyHEX8(y + KeyOffset) = (Cur 24)
Cur = Cur Mod 24
y = y -1
Loop While y >= 0
j = j -1
winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
Last = Cur
Loop While j >= 0
If (isWin8 = 1) Then
keypart1 = Mid(winKeyOutput, 2, Last)
insert = «N»
winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then winKeyOutput = insert & winKeyOutput
End If
a = Mid(winKeyOutput, 1, 5)
b = Mid(winKeyOutput, 6, 5)
c = Mid(winKeyOutput, 11, 5)
d = Mid(winKeyOutput, 16, 5)
e = Mid(winKeyOutput, 21, 5)
ConvertToKey = a & «-» & b & «-» & c & «-» & d & «-» & e
End Function
‘ Файл get_windows_key_via_reg_wmi.vbs доступен для скачивания в ссылках к обработке Системный администратор: //infostart.ru/public/172189
С уважением к сообществу МА!
тоже присоединюсь к сообществу: большое спасибо за данную публикацию, полезная информация
(0) Ради трёх функций надо выделять в отдельную публикацию? Ты случайно не рейтинг с манями нарабатываешь?
(0) Кстати, Automation.chm ты сам делал?
(2) Поручик,
1-я часть — То, чем сам пользуюсь, что заинтересовало.
2-я часть — Тематическая — «Работа с Файловой системой».
3-я часть — Тематическая — «Работа с Реестром».
Надо было конечно сразу — по темам, было бы структурировано, что кажется более логично.
Но теперь — что сделано — то сделано.
(3) Поручик,
Automation.chm взял готовым, где взял — теперь уже и не помню.
StepByStep, Спасибо большое за интересные статьи, но всё же и вправду объединить их в одну статью было бы лучше. А то как то даже не прилично выглядит)
И всё же плюс =)
Спасибо за статью. Плюс
интересует как с помощью WSH можно одновременно изменить размер управляемой формы и перетащить ее верх за границу экрана, сделав таким образом рабочий стол на весь экран. Встречал тут обработку которая может или перетащить за границу экрана, или изменить размер, а одновременно не может. Исходников там нет все зашито в dll.
(8) tvixeg,
WSH — Это сценарии команд, запускаемые интерпретаторами:
— Wscript.exe (если надо, выводит диалоговое окно);
— Cscript.exe (никаких диалоговых окон не выводит).
Wscript.exe — Используется по умолчанию в Windows.
WSH Имеет минимум возможностей по работе с окнами:
— Запустить программу в скрытом/минимальном/стандартном/текущим размером окна.
— Создать ярлык, запускающий программу в максимальном/стандартном/свернутым окном.
— Минимизировать/Отменить минимизацию окон открытых приложений.
— Определить количество открытых окон проводника.
— Расположить окна каскадом.
— Вывести окно сообщений.
— Активизировать окно интересующего приложения.
(8) tvixeg,
То, о чем вы говорите делается посредством вызовов Win API функций
мне очень понравилось!
Подскажите, как получить из сетевого окружения все компы сети? Доступные домены, IP и имена каждого компа, принадлежность к домену?
(12) AlexBar,
Данная часть «WSH. ОТ ТЕОРИИ К ПРАКТИКЕ» посвящена реестру.
Интересующая Вас функция «СетевоеОкружение()» добавлена мной сегодня в Часть I, в сборной, так сказать, «солянке».
Спасибо.
Добавлена новая Функция ЗарегистрироватьФайлDLL().
(3) Порутчик, Automation.chm лежит на Скрипт кодинг-е
http://www.script-coding.com/
Добавлены 2 новых функции:
1. RegistryInformation:
Функция, позволяющая получить информацию о реестре локального/удаленного компьютера,
а также дату установки Windows.
2. DescriptionComputer:
Функция, позволяющая записать в описание компьютера (локального/удаленного) имя доменапользователя, работающего на нем.
Описание компьютера отображается в качестве комментария в сетевом окружении.
Добавлена новая функция WindowsInfo:
Функция, позволяющая получить информацию об установленной Windows на локальном компьютере.
Добавлена новая функция Computer_Programs():
Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
(5)
я знаю, где взял 🙂
Функция Computer_Programs() заменена на Computer_Programs_Product().
Добавлена новая функция Computer_Programs_Registry().
Функции, позволяющие получить информацию об установленных программах локальном/удаленном компьютере.
(4) спасибо за статью. Интересует функция ЗарегистрироватьФайлDLL() от имени администратора можно ли зарегать компоненту и что бы uac не появлялась?
(21) amon_ra,
Нативную внешнюю компоненту ?
20.10.2013.
Добавлен vbs-Срипт. Получение серийного номера Windows.
Привет всем
Использование * в запросах иногда приводит к существенным временным затратам
Например время исполнения запроса — несколько секунд, а именнованного несколько милисекунд
(24) Ovrfox,
СПАСИБО.
Добрый день!
Подскажите! Не могу понять!
Запускаю Процесс = WshShell.Exec(СтрокаКоманды), где в переменную СтрокаКоманды уже вписана строка создания архива.
В строке запуска присутствует путь создания архива и он является хранилищем(!). Он вида 192.168.0.100, 192.168.0.101 и т.п.
На некоторых терминалках это запускается(в домене), на некоторых нет(не в домене).
Ругается ан ошибки.
1. В отладчике поймал следующую «Ошибка при вызове метода контекста (GetOwner): Произошла исключительная ситуация (SWbemObjectEx): Not found». GetOwner делается для процесса.
2. если в командную строку включить параметр «/OUT Имя лог файла», то в лог выводится следующее
«Ошибка при выполнении файловой операции ‘\192.168.0.1001cHANDSИмяБазыИмяБазы 2018-05-14 14-12-35.n1’. 1326(0x0000052E): Вход в систему не произведен: имя пользователя или пароль не опознаны.» (с локальными путями нормально)
А, если запустить из под CMD эту строку запуска — всё отрабатывает «на ура»
Все папки хранилища доступны на этом терминальном сервере, все пути реальные и проверены. Доступ ВЕЗДЕ правильный.
Т.е. как бы из под меня с командной строки всё работает, а вот из под EXEC ругается на нелогин. Значит или запускается под другим пользователем. Под каким я не пойму.
Помогите пожалуйста разобраться.