Мы распространили старую версию нашего установщика wix с некоторыми файлами, установленными как компоненты Permanent = "yes".Но теперь мы хотим попросить пользователя сохранить или удалить эти файлы на unistall.Эти файлы находятся в папке Program Files.Мы получаем на DELETE_ALL ответ пользователя.Это:
<InstallExecuteSequence>
<!-- more custom actions -->
<Custom Action="DeleteFiles" Before="InstallFinalize">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") AND (NOT (DELETE_ALL=0))</Custom>
</InstallExecuteSequence>
<CustomAction Id="DeleteFiles" ExeCommand='Company.CustomActions.ExeActions.exe' Directory="INSTALLDIR" Return="check" Impersonate="yes" Execute="immediate" />
Company.CustomActions.ExeActions.exe - это простое консольное приложение, которое удаляет эти файлы в C: \ Program Files (x86) \ Company \ Program1 с помощью манифеста с
* 1005.*
При выполнении .msi мы получаем следующие строки:
MSI (s) (20:88) [15:16:19:130]: MSI_LUA: Elevation required to install product, will prompt for credentials
MSI (s) (20:88) [15:16:21:798]: MSI_LUA: Credential Request return = 0x0
MSI (s) (20:88) [15:16:21:798]: MSI_LUA: Elevated credential consent provided. Install will run elevated
Или, если мы запускаем его из Administrator cmd.exe:
MSI (c) (24:F8) [12:35:32:530]: MSI_LUA: Setting AdminUser property to 1 because this is the client or the user has already permitted elevation
Мы пытаемся установить для нашего пользовательского DeleteFiles пользовательскийдействие устанавливает разные значения для Impersonate (да / нет) и Execute (немедленное / отложенное) без успеха на этом.
Далее мы пытаемся сделать это удаление компонентом с RemoveFiles или CustomAction, написанным на c #, отмеченномс атрибутом CustomActionAttribute, как и другие, которые мы используем.Также безуспешно.
[CustomAction]
public static ActionResult DeleteAll(Session session) { /*...*/ }
Или вызов из CustomAction в другой метод:
[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
private static void DeleteFiles() { /*...*/ }
Мы получаем исключение:
Request for principal permission failed.
at System.Security.Permissions.PrincipalPermission.ThrowSecurityException()
at System.Security.Permissions.PrincipalPermission.Demand()
at System.Security.PermissionSet.DemandNonCAS()
at Company.CustomActions.DeleteFiles(Session session)
at Company.CustomActions.DeleteALL(Session session)
Возможно реализовать функциюудалить постоянные файлы, установленные в предыдущей версии по требованию?Есть идеи?