Вопрос по c# – MsiExec прогресс улов

2

Я пишу небольшое приложение для установки одного продукта и удаления другого в режиме без вывода сообщений.
У каждого продукта есть MSI-файл и ничего более, и в манифесте моего приложения указано, что его следует запускать с правами администратора.
Это довольно легко запуститьmsiexec с правильными аргументами для выполнения моей задачи (просто куча кода) и все работает нормально.
В любом случае, завершение какого-либо пакета занимает много времени, и на некоторых старых компьютерах пользователь спрашивает, происходит ли что-то еще в фоновом режиме или зависает.
Так можно ли "поймать"msiexec прогресс и, например, обновить индикатор прогресса в моем приложении? Звучит безумно, но я уверен, что какой-то профессиональный установщик работает таким образом, запуская внешний MSI-пакет.
Так возможно ли это? Есть ли что-то, что мы можем сделать в C #, или это очень сложная задача, требующая большого количества знаний, которых у меня нет?

Просто примечание: я знаю, что мог бы использовать"/qb" param, но какой-то пакет ведет себя некорректно, и я не хочу его использовать.

Просто замечание: я не думаю, что вы правы в том, что "/ qb" ведет себя по-разному для некоторых пакетов, чем "/ qn". По моему многолетнему опыту я не знаю ни одного случая, где бы это было правдой Технически, ни один из них не использует так называемую пользовательскую последовательность, поэтому поведение установки такое же, кроме индикатора выполнения и нескольких возможностей диалогового окна. Верно, что UAC, появившийся в последнее время, ведет себя иначе, чем если бы у вас были права администратора с самого начала, но это не имеет никакого отношения к & quot; / qb & quot; сам. Philm

Ваш Ответ

2   ответа
0

So is it possible to "catch" msiexec progress and for example update a progressbar on my app?

ты можешь иметь нормальныйprogresBar это будет продолжаться, пока задача не будет выполнена что-то вроде этого

     myProgressBar.Style = ProgressBarStyle.Marquee;

отшатер также проверьтеmsdn.microsoft.com

enter image description here

1.Проверьте, еслиmsiexec бежит

2. начатьmyProgressBar.Style = ProgressBarStyle.Marquee;

3. Продолжайте работатьenter image description here

4.Еслиmsiexec закончил, то скрыть прогресБар

Спасибо за ваш ответ, но выделение или что-то в этом случае не то же самое: я хочу, чтобы мой клиент был "уведомлен" о реальном прогрессе. Marco
хорошо, но в приложении ур вы можете иметь шатер для отображенияIndeterminate progress это по крайней мере, они знают, что что-то готовит на заднем плане, кроме отображения
5

вероятно, придется использовать API установщика Windows напрямую, если вы хотите отслеживать прогресс,

http://www.codeproject.com/Articles/5773/Wrapping-the-Windows-Installer-2-0-API

В этой статье CodeProject показан пример, в то время как Microsoft имеет мало информации о функциях в MSDN,

http://msdn.microsoft.com/en-us/library/windows/desktop/aa370384(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/aa368786(v=vs.85).aspx

Спасибо, я прочитаю и попробую! Я не знал, что есть API для установщика Windows ... хорошо. +1 за ваши знания :) Marco
Ссылка CodeProject - Святой Грааль: замечательно !!! Спасибо, именно то, что мне было нужно! Marco

Похожие вопросы