При написании фоновых заданий на сервере x64 частенько сталкивался с тем, что трудно каждый раз подбирать название строки драйвера для MySQL, в результате родился вот такой незамысловатый кусочек кода:
Список=ПолучитьСписокУстановленныхODBC();
СтрокаДрайверов=СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Список);
СтрокаДрайвера=Неопределено;
Если не Найти(нрег(СтрокаДрайверов), "mysql") Тогда
//Нет драйвера, устанавливаем на клиенте
#Если Клиент Тогда
ВерсияWin=WindowsInfo();
МакетКомпоненты=ПолучитьМакет("mySql"+Лев(ВерсияWin,3));
ИмяФайлаУстановки=КаталогВременныхФайлов()+"driverMySQL.exe";
МакетКомпоненты.Записать(ИмяФайлаУстановки);
КомандаСистемы(ИмяФайлаУстановки);
Сообщить("Пытаемся установить драйвер MySQL",СтатусСообщения.Важное);
#Иначе
ВызватьИсключение "На севере не установлен драйвер MySQL";
#КонецЕсли
Иначе
МассивДрайверов=Новый СписокЗначений;
МассивДрайверов.ЗагрузитьЗначения(Список);
//Сортируем для использования старшей версии драйвера, если их установлено несколько
МассивДрайверов.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
Для Каждого СтрДрайвер из МассивДрайверов Цикл
Если Найти(нрег(СтрДрайвер.Значение), "mysql") Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Функцию ПолучитьСтрокуИзМассиваПодстрок можно взять из БСП. При работе на клиенте, при отсутсвии драйвера, будем ставить его автоматически из макета. Макет создаем из скачанного exe или msi файла с официального сайта. Для корректной установки на сервере, соответсвенно запускаем клиента с сервера, где выполняются фоновые задания 1С.
Далее обычное создание объекта:
Соединение=Новый COMОбъект("ADODB.Connection");
Порт = ?(ЗначениеЗаполнено(СтруктураПараметровСайта.Порт), СтруктураПараметровСайта.Порт, 3306);
СтрокаСоединения= "
|DRIVER={"+СокрЛП(СтрДрайвер)+"};
|SERVER="+Сервер+";
|DATABASE="+ИмяБазы+";
|UID="+ИмяПользователя+";
|PWD="+Пароль+"";
Собственно функция чтения установленных драйверов из реестра, для этого используем WMI:
Функция ПолучитьСписокУстановленныхODBC()
Перем ODBCDrivers,Значения;
WinMGMT = ПолучитьCOMОбъект("winmgmts:\\.\root\default:StdRegProv");
HKLM = 2147483650;
HKPath= "SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers\";
WinMGMT.EnumValues(HKLM, HKPath, ODBCDrivers, Значения);
Рез=Новый Массив;
Для Каждого Драйвер из ODBCDrivers Цикл
Рез.Добавить(Драйвер);
КонецЦикла;
Возврат Рез;
КонецФункции
Ну и элементарное определение через MSScriptControl версии windows, из-под которой мы работаем:
Функция WindowsInfo()
ScrptCtrl=Новый COMОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function GetOSVersion()
| strInfo=vbNullString
| For Each objOStype in GetObject(""winmgmts:"").InstancesOf (""Win32_ComputerSystem"")
| 'WScript.Echo ""PC type = "" & objOStype.SystemType
| strInfo = strInfo & objOStype.SystemType & vbCrLf
| Next
|
| GetOSVersion=strInfo
|End Function
|");
Возврат ScrptCtrl.Run("GetOSVersion");
КонецФункции