Успешно закрыть диалог в другом процессе - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть вопрос.Проблема в том, что у меня есть другой процесс, который вызвал метод ShowDialog (), мне нужно закрыть это диалоговое окно из другого процесса, но мне нужно закрыть его, возвращая DialogResult.OK.

Итак, из моей программы .net (другойпроцесс) хочу успешно закрыть.Я пытался использовать winapi для решения этой проблемы, пробовал функцию EndDialog, но она возвращает ошибку ACCESS_DENIED.Пробовал использовать хуки, но они возвращают error_no_token.

Мне нужно это, чтобы запустить MSI-установщик без вывода сообщений.Я запускаю его с ключом / qn, но этот чертов установщик имеет встроенное действие, которое в любом случае показывает диалог.Я попытался закрыть это окно с помощью функции sendmessage, но в этом случае установщик говорит, что это ошибка, и откатывает процесс установки.Я могу заполнить все значения программно и нажать кнопку «ОК» в диалоговом окне, но для этого требуется заполнить ВСЕ ЗНАЧЕНИЯ, и их много, поэтому это отнимает много времени.Цель этого диалогового окна - создать файл конфигурации, который я могу создать вручную после установки.

Есть ли способ выполнить эту задачу?

Ответы [ 3 ]

1 голос
/ 03 ноября 2010

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

Пользовательский интерфейс принадлежит только одному процессу, и кроме автоматизации тестов, должен толькобыть изменен этим процессом или пользователем.

1 голос
/ 03 ноября 2010

Раньше были наборы инструментов для установки, предназначенные для системных администраторов, которые наблюдали за реестром и файловой системой во время работы установщика, а затем создавали пользовательский файл MSI для автоматизации процесса.Это может быть другой путь для вас.

1 голос
/ 03 ноября 2010

Звучит так, как будто основная проблема, которую вы испытываете, связана с проверкой текстовых полей. Как вы сказали, вы будете редактировать файлы конфигурации позже, просто поместите несколько фиктивных значений в каждое поле и нажмите OK, чтобы вызвать проверку.

...