развернуть...
```ruby
require 'ass_launcher'
# Модуль предоставляет общий Api AssLauncher
include AssLauncher::Api
def main(dupm_path)
# Получаем обертку для толстого клиента версии 8.3.8.+
thick_client = thicks('~> 8.3.8.0').last
# Если AssLauncher не смог найти исполняемый файл метод thicks вернет
# пустой массив, а пустой_массив.last вернет nil
fail 'Установка платформы 1С v8.3.8 не найдена'\
' выполните `ass-launcher env` для просмотра установленных'
' версий платформы 1С' if thick_client.nil?
# Создаем объект для запуска толстого клиента в режиме
# "конфигуратора" с необходимыми параметрами запуска:
# - _S - путь к серверной ИБ - параметр запуска /S
# - dumpIB dump_path - выполнение пакетной команды - параметр /DumpIB
designer = thick_client.command :designer do
_S 'enterprse_server/application_name'
dumpIB dupm_path
end
# Запускам команду на исполнение и ждем завершения
designer.run.wait
# Проверяем результат. Если работа конфигуратора завершится с ошибкой
# verify! кинет исключение
designer.process_holder.result.verify!
end
main ARGV[0]
```
Больше примеров можно найти в каталогах [examples/](examples/) и
[examples/troubles](examples/troubles)
## 1С:Предприятие x86_64 для Windows
С версии `8.3.9` 1С выпустила x86_64 дистрибутив платформы для Windows. Для
выбора архитектуры платформы `AssLauncher::Enterprise::BinaryWrapper` имеет
свойство `arch` по которому можно фильтровать массив найденных установок
платформы 1С. Однако для удобства в модуле `AssLauncher::Api` реализовано
несколько хелперов с суффиксами `*_i386` и `*_x86_64` которые возвращают уже
отфильтрованный по архитектуре массив.
Для in-process OLE сервера 1С `v83.ComConnector`, файл `comcntr.dll`, архитектура
бинарного файла сервера выбирается автоматически в зависимости от архитектуры
Ruby.
По умолчанию, использование x86_64 OLE сервера 1С, запрещено (из за проблем
описанных ниже). Для принудительного использования x86_64 OLE сервера 1С
установите флаг `use_x86_64_ole` конфига *AssLauncher*:
```ruby
AssLauncher.configure do |conf|
conf.use_x86_64_ole = true
end
```
## Проблемы связанные с работой с OLE серверами 1С
### Проблема с x86_64 in-process OLE сервером `v83.COMConnector`
При использовании `x86_64` сервера `v83.COMConnector`, Ruby терпит крах при
возникновении исключения во время вызова метода сервера `connect`:
```
$ruby -v
ruby 2.3.6p384 (2017-12-14 revision 9808) [x86_64-cygwin]
$pry
RbConfig::CONFIG['arch'] #=> "x86_64-cygwin"
require 'win32ole'
inproc = WIN32OLE.new('V83.COMConnector')
inproc.connect('invalid connection string')
....*** buffer overflow detected ***: terminated
Aborted (стек памяти сброшен на диск)
```
Тот же пример для `i386` сервера работает прекрасно:
```
$ruby -v
ruby 2.3.6p384 (2017-12-14 revision 9808) [i386-cygwin]
$pry
RbConfig::CONFIG['arch'] #=> "i386-cygwin"
require 'win32ole'
inproc = WIN32OLE.new('V83.COMConnector')
inproc.connect('invalid connection string')
WIN32OLERuntimeError: (in OLE method `connect': )
OLE error code:80004005 in V83.COMConnector.1
Неверные или отсутствующие параметры соединения с информационной базой
HRESULT error code:0x80020009
Exception occurred.
from (pry):3:in `method_missing'
```
### Проблемы с x86_64 local OLE серверами `v83c.Application` и `v83.Application`
В теории архитектура local OLE сервера, в отличии от in-process сервера, не важна
с точки зрения архитектуры клиента, т.е. Ruby, так как local OLE сервер
выполняется в своем процессе.
Однако это только в теории. Если запустить [examples/](examples) в `i386` Ruby
но использовать `x86_64` серверы `v83.Application` наблюдается неожиданное
поведение такое как неизвестная ошибка при установке соединения с информационной
базой:
```
WIN32OLERuntimeError: (in OLE method `connect': )
OLE error code:0 in