Как мы можем запросить перезагрузку компьютера после установки из пользовательского действия C#?Force Reboot от пользовательского действия в Msi в C#
Мы используем проект установки VS 2005 для нашей установки, и нам необходимо программно решить запустить перезагрузку (так что это не произойдет при каждой установке, только на некоторых).
ОБНОВЛЕНИЕ: Мы ищем то, что уже встроено в систему пользовательских действий MSI. Если этого не существует, мы можем как-то прибегнуть к перезагрузке ПК, но хотелось бы избежать этого.
UPDATE: Мы видим, где вы можете установить REBOOT = Force при редактировании Msi в Orca, можете ли вы изменить эти таблицы из пользовательского действия C# во время выполнения? Мы могли бы установить это для перезапуска каждый раз, но это может привести к раздражению нашей установки (ее нужно будет перезагрузить только в редких случаях).
UPDATE: Мы пытались настройки:
savedState["REBOOT"] = "Force";
Изнутри метода установки() нашего пользовательского действия, но не повезло. Это не похоже на IDictionary, saveState действительно что-то делает.
Также пробовал:
Context.Parameters["REBOOT"] = "Force";
Но я думаю, что эта коллекция только аргументы командной строки, передаваемые настраиваемого действия.
ОБНОВЛЕНИЕ: есть ли способ отредактировать нашу MSI с Orca, чтобы этот трюк работал? Может быть, запланировать перезагрузку при условии существования какого-либо файла? Мы не обнаружили, как установить свойства MSI из пользовательского действия C#.
UPDATE. Мы попытались закреплять в AppDomain.ProcessExit и AppDomain.DomainUnload и начать новую нить и вызывая Process.GetCurrentProcess() WaitForExit() и ни одно из этих событий не будет стрелять изнутри # пользовательских действий C ...
Нам нужно что-то встроенное в пользовательскую систему действий MSI. Мы всегда можем программно перезагрузить ПК с помощью shutdown.exe (или вашей функции Win32), но ищем лучшее решение, так как MSI необходимо сначала закончить правильно. – jonathanpeppers
У нас была специальная библиотека действий C++, которая при необходимости перезапустилась, и теперь, когда я думаю об этом, он, вероятно, установил флаг MSI REBOOT вместо прямого вызова функции Win32. Это было какое-то время, поэтому я не уверен ... C++ пользовательские действия не слишком страшны для написания, поэтому я бы не стал это исключать. – Sneal
Знаете, как установить флаги MSI из управляемого пользовательского действия? Я думаю, что это может быть невозможно ... – jonathanpeppers