Мое приложение вызывает msiexec для запуска удаления.
logger->LogDebug("Actions: MsiUninstallExec()!");
System::Diagnostics::Process ^p = gcnew System::Diagnostics::Process();
p->StartInfo->FileName = "msiexec";
p->StartInfo->Arguments = "/x " + AppSetting::ProductCode;
p->Start();
/// -->>> Uninstall
/// -->> Choose restart or not.
/// -->>> Application Exit
После удаления пользователи должны выбрать перезагрузку или нет, чтобы завершить этот процесс.
Но мой запрос клиента: «Индикатор выполнения msiexec должен перейти к последнему (правому концу).» Как его редактировать? У тебя есть идеи для меня?
Предложение: Можно попробовать что-то вроде этого (найти продукт GUID):
msiexec.exe /X {PRODUCT-GUID} /QN REBOOT=ReallySuppress /L*V "C:\Temp\msilog.log"
Быстрое объяснение командной строки:
/X {PRODUCT-GUID} = run uninstall sequence for specified product
/QN = run completely silently
/REBOOT=ReallySuppress = suppress reboot prompts
/L*V "C:\Temp\msilog.log" = verbose logging at specified path
альтернативыЕсть много способов вызвать удаление MSI: Удаление MSI-файла из командной строки без использования msiexec. Вы можете удалить через: msiexec
, ARP
, WMI
, PowerShell
, Системы развертывания, такие как SCCM
, VBScript
/ COM Автоматизация, DTF
, или через hidden Windows cache folders
, и несколько других вариантов.
msiexec.exe: Есть два вкуса msiexec.exe
командная строка. Оригинальный и более поздний, который добавил переключатели «полное слово», такие как /quiet
а также /noreboot
и лайки. Оригинальная командная строка /qn
как переключатель для бесшумного режима. Вот ссылки на оба варианта: MSIEXEC в чем разница между qn и quiet.
Некоторые ссылки:
msiexec /passive /x ProductCode
Это должно дать вам только пользовательский интерфейс ProgressBar. Вы также можете спросить пользователя, хотят ли они пропустить перезапуск или всегда принудительно перезапускать после завершения удаления. Затем можете добавить / Norestart или же / forcerestart вариант соответственно.