Я написал программу для автоматической деинсталляции ряда программ с помощью ManagementObject в C#. Он работает правильно, за исключением того, что некоторые программы автоматически перезагружают компьютер, и это поражает цель моей программы. Есть ли способ, которым я могу заставить его подождать, пока все будет удалено для перезагрузки?Как удалить программу без перезагрузки
Вот метод, который фактически удаляет программы:
static void UninstallProduct(string path)
{
ManagementObject product = new ManagementObject(path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
Console.WriteLine(
"Uninstalling: "
+ product.GetPropertyValue("Name")
+ "...");
object result = product.InvokeMethod("Uninstall", null);
Console.WriteLine(
"The Uninstall method result is {0}",
result.ToString());
}
}
Я не знаком с классом ManagementObject, поэтому я не пишу это как реальный ответ. Работая с установщиком Windows, я бы предположил, что вы видите, есть ли флаг, который сообщает об этом объекту, чтобы он не позволял установщику перезагружать систему, и если есть флаг, который вы можете найти в возвращаемом значении, которое сообщает вам, что установка требует перезагрузка для завершения. Так работает установщик Windows. Затем, как только все программы будут удалены, если потребуется перезагрузка, вы можете принудительно перезагрузить систему. – RobH