2

Когда вы устанавливаете или удаляете сертификат корневого ЦС с помощью инструментов командной строки CertUtil.exe или CertMgr.exe, Windows запрашивает у пользователя подтверждение с помощью MessageBox (для сертификатов, отличных от корневого ЦС, этот вопрос не задается), даже для корневого CA сертификат хранилище для текущего пользователя.

Для автоматических обновлений сертификатов это хлопотно.

Я видел такое поведение в Windows XP, Vista и 7 (я еще не проверял Windows Server 2003 и 2008, но я предполагаю, что они также задают этот вопрос).

У меня есть два вопроса:

  1. Почему Windows задает этот вопрос, даже если вы устанавливаете / удаляете его из инструмента командной строки?
  2. Как я могу подавить это (кроме наблюдения за появлением диалоговых окон и отправкой сообщений Windows для нажатия кнопки "Да")?

Диалог подтверждения MessageBox выглядит следующим образом:

[Root Certificate Store]
Do you want to DELETE the following certificate from the Root Store?
...
[&Yes]  [&No]

и это:

[Security Warning]
You are about to install a certificate from a certification authority (CA) claiming to represent:
...
[&Yes]  [&No]

--jeroen

2 ответа2

5

Самое простое решение - включить ответ в скрипт следующим образом:

echo Y | CertUtil.exe ....

Этот метод не всегда работает для всех программ, поэтому он все еще нуждается в некотором тестировании на вашей стороне.

Для сообщений вы можете использовать nircmd с параметром dlg .
В сценарии вы также можете использовать встроенную команду timeout /t seconds чтобы дать окну сообщения заданное количество секунд, в течение которых оно должно появиться.

Вот выдержка из файла справки:

nircmd.exe dlg [Process Name] [Window Title] [Action] [Parameters]

Позволяет взаимодействовать со стандартными диалоговыми окнами и окнами сообщений Windows. Когда диалоговое окно открыто, вы можете использовать эту команду, чтобы "щелкнуть" по кнопкам ok/cancel/yes/no или заполнить текстовые поля в диалоговом окне.

Следующая команда выберет ответ "Да" для любого диалогового окна вопроса процесса Explorer:
dlg "explorer.exe" "" click yes

Следующая команда выберет ответ "Отмена" для любого диалогового окна вопроса любого процесса:
dlg "" "" click cancel

Описание параметров:

[Имя процесса]: указывает процесс, который создал желаемое окно. Вы можете указать только имя процесса или полный путь процесса. Если этот параметр является пустой строкой (""), команда будет выполнена в любом процессе.

[Заголовок окна]: указывает заголовок окна, в котором вы хотите выполнить действие. Если этот параметр является пустой строкой (""), команда будет выполнена в любом окне, независимо от заголовка окна.

[Действие]: вы можете указать один из следующих параметров:
щелкните: нажмите указанную кнопку. Вы можете указать одно из следующих предопределенных значений (только для стандартных диалоговых окон Windows!): Да, нет, ок, отмена, повтор, игнорирование, закрытие, помощь. Вы также можете указать любой идентификатор элемента управления в виде числового значения.
settext: установить текст указанного элемента управления. Первый параметр этого действия указывает идентификатор элемента управления, а второй параметр - текст.

0

Если вы, как и я, искали ответ "да" в окне certutil.exe через nircmd, выполните команду.

C:\Users\<user>\Desktop>nircmdc.exe dlg "certutil.exe" "" click yes execmd certutil.exe -p xxxxx -user -importpfx cert.p12

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .