IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Инсталлятор программ, MFC
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Оно работает, что само по себе удивительно. Поэтому посмотрите, пожалуйста, и укажите на то, что не есть хорошо.Прикрепленный файл  ProInst.rar ( 206.87 килобайт ) Кол-во скачиваний: 707

Как узнать, установилась ли программа?
Думаю таймером, например, каждую секунду, проверять, не появились ли доступные кнопки для продолжения.
Таким же образом (добавить в таймер) проверять не поменялось ли главное окно.

Почему-то не работает таймер. Ни со своей функцией обработки, ни с функцией главного окна. Запуск и остановка таймера проходят успешно, но функции обработки работа не передается.

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Ошибался. Передается. Просто между моими SetTimer и KillTimer проходило времени меньше 1мс Следовательно WaitForSingleObject() - полный тормоз, чего не ожидал. А так как сообщения от таймера "могут не обрабатываться, если их много накапливается в очереди", то даже по окончании WaitForSingleObject() не делается OnTimer то количество раз, которое он бы сделал за это время.

Что делать в этом случае? Ведь когда программа установилась, инсталлятор обычно просит нажать "Finish" и это надо отследить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


А можно (для тех, у кого нет VC++ и MFC) показать скриншот интерфейса программы, и описать, что именно программа должна делать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Прикрепленный файл  ProInst.rar ( 542.94 килобайт ) Кол-во скачиваний: 664
*.ехе сможете запустить? Если нет - вот скрин Прикрепленное изображение
Выбранные программы в верхнем ЛистБоксе запускает, нажимает кнопки с введенными ниже названиями, ожидает закрытия запущенной программы, повторяет.
Лог - для проверки. Пока выводит только оповещение об окончании процесса.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(sheka @ 25.08.2011 1:41) *
*.ехе сможете запустить?

[offtop]я живо представил себе IUnkonown чешущим репу и пытающимся сообразить - а сможет ли он запустить все экзешники хором в текущем каталоге (а также, какой каталог у него текущий))? или речь шла про все экзешники на всем компьютере?.. lol.gif [/offtop]


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Я как ни странно имея VS не смог откомпилировать код))Конвертация тоже закончилась провалом)
Я так и не понял в чем проблема?Что необходимо то....
Не есть хорошо то,что после некоторого ожидания в районе 1 секунды,если не закрыть программу с кнопочками,то программа поиска и нажатия зависает до тех пор пока не закроеш программу с кнопочками.Именно зависает,не ожидает.
Еще не понятно почему нарушается последовательность искомых кнопочек,даже по скрину видно,что ввод начинается с 2 кнопки и заканчивается первой делая круг,для других примеров у меня получилось тоже самое.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Выбранные программы в верхнем ЛистБоксе запускает, нажимает кнопки с введенными ниже названиями, ожидает закрытия запущенной программы, повторяет.
Навскидку (по твоему скрину + исходникам) вижу как минимум одну ошибку и один недочет...

Ошибка: кнопки нажимаются не в том порядке, в котором присутствуют в листбоксе. Чтобы было в нужном порядке - нужно для каждого элемента листбокса запускать EnumChildWindows (и, пока найденная кнопка неактивна, не проходить дальше по списку в листбоксе, а ждать, когда она станет активной. Другого пути, кроме использования таймера и как минимум одной доп. глобальной переменной для этого - индекс ожидаемой в данной момент кнопки из нижнего листбокса - я пока не вижу), а не просто проходить по всем окнам, и смотреть, есть ли заголовок в списке.

Недочет: что, для всех программ нажимается одна и та же последовательность кнопок? Это неправильно, нужно иметь возможность для каждой программы из верхнего листбокса иметь свой список кнопок для нажатия.

А вообще непонятен смысл создания такого приложения. То есть, для начала, ты должен сам запустить инсталлятор, чтобы выяснить последовательность нажатия кнопок, и только потом - забросить его в свое приложение? Смысл?

Цитата
а сможет ли он запустить все экзешники хором в текущем каталоге
Проблема-то вся в том, что у меня вообще нет exe-файлов no1.gif

Добавлено через 4 мин.
Цитата
Еще не понятно почему нарушается последовательность искомых кнопочек,даже по скрину видно,что ввод начинается с 2 кнопки и заканчивается первой делая круг,для других примеров у меня получилось тоже самое.
Потому что поиск организован некорректно, см. выше... На данный момент кнопки нажимаются не в том порядке, как они перечислены в листбоксе. Скорее всего, нажимаются кнопки, перечисленные в листбоксе, в порядке, задаваемом TabOrder-ом (или как там Windows перечисляет контролы в Enum...-функциях?)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Цитата
Недочет: что, для всех программ нажимается одна и та же последовательность кнопок? Это неправильно, нужно иметь возможность для каждой программы из верхнего листбокса иметь свой список кнопок для нажатия.

Скорее всего,ну или как я себе пресдавляю,поиск будет лиш 3 кнопок,причем с приоритетом.Кнопки "Далее","Обзор","Финиш",Ну и собсвенно последовательность будет бесконечная,до тех пор пока не нажмем финиш ,после чего переход к следующей строчке списка,ну и если на текущий момент есть кнопки далее и обзор,то стачала обзор, устанавливаем директорию, потом далее.Если это расчитано на параллельную установку сразу нескольких программ,то это в большинстве случаев не прокатит.Но ценность данной программы весьма сомнительна,только если после очередной чистки диском или переустановки ОС быстренько установить "джентельменский" набор))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Кнопки "Далее","Обзор","Финиш",Ну и собсвенно последовательность будет бесконечная,до тех пор пока не нажмем финиш ,после чего переход к следующей строчке списка
Ну, и неправильно. В одном и том же инсталляторе можно сделать Next -> Next -> Finish (то есть, тебя остальные параметры мало интересуют), а можно - Next -> Next -> Next -> Next -> Next (на этой странице чего-то подкрутил) -> Finish. И какой с учетом вышесказанного должен быть приоритет у кнопок? Как только появилась/стала активной Finish, жать ее, до тех пор - Next?

Цитата
только если после очередной чистки диском или переустановки ОС быстренько установить "джентельменский" набор))
Гугл знает: unattended installation
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Цитата

Ну, и неправильно. В одном и том же инсталляторе можно сделать Next -> Next -> Finish (то есть, тебя остальные параметры мало интересуют), а можно - Next -> Next -> Next -> Next -> Next (на этой странице чего-то подкрутил) -> Finish. И какой с учетом вышесказанного должен быть приоритет у кнопок? Как только появилась/стала активной Finish, жать ее, до тех пор - Next?

Ну так речи про "подкрутил" вообще нету.Тут уже голова нужна,а то подкрутить можно так,что и не поедет...Как без участия человека выбирать какие галочки нужны,тут уже не мой уровень,как это сделать при повторной установке со скрипом понятно,можно попробовать сохранить прошлую конфигурацию,но тут вылезет опять куча НО..Например,если это первая установка подобной программы,где брать прошлую конфигурацию.Да и где все эти конфигурации хранить..Создавать БД...Овчинка выделки не стоит.

Да и вообще я привел весьма утрированный пример,конешно почти в каждой программе вылезает окошко с лицензионным соглашением, где надо нужную калочку поставить,иначе не встанет,что в моем примере явно не прокатит.Но это на мой взгляд наиболее простой вариант развития событий,несомненно у него есть минусы,некоторые были уже приведены выше.

Гугл молодец,но даже на примере установки "семерки" этим способом,до начала установки необходимо выбрать все нужные галочки прочитать соглашение и тд.Сделать подобное для 1 программы несложно,но как сделать это для большинства устанавливаемых программ?Потрошить инсталятор, заранее выводить всю запрашиваемую в последствии инфу,заранее ее ввести,запомнить,и когда надо вставить в нужные поля.Тогда встает вопрос, как распотрошить инсталяторы.А это вроде уже не совсем законно..Но зато такой вариант будет универсальным.
Возможно я что то не правильно понял и это можно сделать как то по другому,если что поправьте.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Тогда встает вопрос, как распотрошить инсталяторы.
Нормальные инсталляторы не надо потрошить. На сайте MS легально лежит (ну, по крайней мере лежал) редактор БД Orca, который позволяет (разумеется, для Windows Installer-а, а не для самописного) создать так называемый Transform-файл (по простому - MST). Этот файл потом подхватывается самим инсталлятором, и установка происходит именно так, как ты задал. Вот старая статья по этому поводу: http://support.microsoft.com/kb/255905 , новую искать лень. Вот пример, как создается MST-файл для конкретного инсталлятора. Ну, а потом -
msiexec.exe /i TheInstaller.msi TRANSFORMS=myinstallation.mst

, и на фиг тебе не надо никакие кнопочки выискивать...

Ну, а уж коли речь о других (возможно - самописных) инсталлерах - то тут медицина бессильна... smile.gif Возможно, удастся задать нужные данные через ком. строку. Возможно - нет, зависит от качества велосипеда (велосипед в данном случае - всё, кроме Windows Installer-а, являющегося компонентом самой ОС)...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


На проблему с порядком нажатия клавиш внимание обратил, но не придал этому особого значения. Помозгую.
Цитата
только если после очередной чистки диском или переустановки ОС быстренько установить "джентельменский" набор))
Именно так.
Цитата
Гугл знает: unattended installation...Windows Installer
Умеете обламывать велосипеды. smile.gif
Цитата
Я как ни странно имея VS не смог откомпилировать код))Конвертация тоже закончилась провалом)
VS 2005. Удалил папку Debug + *.ncb, чтобы место не занимало. После запуска *.sln все восстанавливается.

Цитата
Не есть хорошо то,что после некоторого ожидания в районе 1 секунды,если не закрыть программу с кнопочками,то программа поиска и нажатия зависает до тех пор пока не закроеш программу с кнопочками.Именно зависает,не ожидает.
Это WaitForSingleObject() виноват.
И все таки, как можно решить вот этот вопрос: Инсталлятор программ
Т.е. если мне нужно обрабатывать сообщения от программы (типа таймер) и одновременно ОТСЛЕЖИВАТЬ, не обязательно ожидать, окончание запущенного процесса?

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Т.е. если мне нужно обрабатывать сообщения от программы (типа таймер) и одновременно ОТСЛЕЖИВАТЬ, не обязательно ожидать, окончание запущенного процесса?
Проверять текущее состояние процесса в том же таймере. Для этого есть Функция GetExitCodeProcess. Если она возвращает STILL_ACTIVE, то процесс еще не завершился. Иначе - возвращенное значение как раз и есть код завершения процесса.

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 17:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name