Подписанный Excel VBA AddIn (* .xlam) не работает должным образом, несмотря на установленный сертификат - PullRequest
0 голосов
/ 23 января 2020

Это сложный вопрос.

Мы разработали Excel VBA AddIn. Это файл * .xlam. Этот надстройка довольно сложна и превращает Excel в собственное программное обеспечение (ну, в общем-то, оно все еще очень похоже на Excel).

Теперь мы хотим повысить нашу безопасность, разрешая только подписанные макросы внутри нашей компании. Поэтому мы создали сертификат, подписали код макроса VBA AddIn и установили сертификат. На самом деле два сертификата, один в качестве доверенного root сертификата и один в списке доверенных издателей.

И теперь мы хотим изменить параметры в центре доверия Excel, чтобы разрешать запуск только подписанным макросам , И это очень хорошо работает со всеми нашими макросами Excel - кроме как с AddIn.

Здесь начинается сложная часть. Сама надстройка запускается и работает. AddIn проверяет, открыт ли специальный тип файла Excel (с определенным пользовательским свойством), и запускает процесс инициализации. Сам файл Excel не содержит никаких макросов (это * .xlsx), но он содержит множество кнопок (объектов формы), которые "подключаются" процедурой инициализации к другим процедурам (подпрограммам / макросам) из AddIn.

MyWorksheet.Shapes("ShapeName").OnAction = "AddInModuleName.ProcedureName"

Этот код присоединяет сабвуферы VBA из надстройки к фигурам (кнопкам) на листе (без макросов). Таким образом, рабочий лист становится проводным и функциональным.

Это работает очень хорошо, когда на макросы не накладываются никакие ограничения. Но в этом случае, когда разрешено запускать только подписанные макросы, код не оправдывается. Кнопки мертвы.

Сам код просто отлично. Я могу вызвать его, например, с помощью сочетания клавиш. Но кнопка отказывается запускать код. Я объясняю это следующим образом: изменяя свойство формы «.OnAction», оно само рассматривается как код - по крайней мере, с точки зрения безопасности. Таким образом, вы можете утверждать, что я динамически добавляю «макросы» (свойство OnAction) в файл Excel. И этот код не считается подписанным. Он не наследует уровень безопасности от созданного им кода.

Какой бы ни была причина, по которой я. Мои кнопки не работают, несмотря на то, что код подписан и доверен. Любые идеи для обходных путей (несмотря на то, что я мог бы использовать ленту Excel вместо собственного интерфейса)?

1 Ответ

0 голосов
/ 03 марта 2020

Я понял. Я публикую ответ, потому что это может быть интересно и другим.

Это предпосылка:

  1. У нас есть файл * .xlsx, другими словами, файл Excel без макросы.
  2. У нас есть надстройка с цифровой подписью и установленная надстройка (и все сертификаты установлены правильно).
  3. Но все объекты фигур (кнопки) в этом файле содержат ссылки на макросы, в данном случае ссылки на надстройку. Эти ссылки хранятся в свойстве «OnAction» каждой фигуры.
  4. Когда Excel запускается, он запускает проверку безопасности перед выполнением любого кода (имеет смысл). Теперь Excel находит эти строки в свойстве фигур OnAction и говорит: «Хм, это подозрительно! Лучше заблокировать все фигуры». Он не блокирует код макроса в надстройке или около того - только сами фигуры (триггеры). И это представляет предупреждение макроса (с настройкой безопасности по умолчанию). Это происходит - даже когда нет доступных макросов. Если в свойствах OnAction есть какая-либо строка, Excel заблокирует ее.
  5. В то же время моя надстройка с цифровой подписью прекрасно работает в фоновом режиме при условии, что все сертификаты были установлены. Но ни одна из кнопок не способна вызвать какой-либо код (сочетания клавиш работают просто отлично).

Таким образом, у Excel нет проблем с моей надстройкой. Он просто не хочет, чтобы эти свойства OnAction содержали какие-либо строки. Это довольно странно. Если Excel не позволяет макросы в файле. Почему это позволяет свойства OnAction. Их также не следует сохранять в файле * .xlsx.

И это обходной путь: я добавил событие BeforeSave в свою надстройку, чтобы очистить все свойства OnAction всех фигур в моей книге. И событие AfterSave, которое снова добавляет все эти строки. Таким образом, сохраненный файл очищается от всего подозрительного кода.

Excel открывает файл. Файл проходит проверку безопасности. И ПОСЛЕ того, что мой код надстройки запускает и связывает все фигуры (записывает вызовы макросов в свойствах OnAction всех фигур) и вот-вот sh - все кнопки полностью функциональны.

Таким образом, у Excel нет проблем с фигуры (в файле * .xlsx), вызывающие код макроса надстройки. И нет проблем, если этот код добавляется во время выполнения. Просто не нравится, когда эти «звонки» присутствуют во время проверки безопасности при запуске.

Похоже на взлом ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...