Wix Managed Bootstrapper не может выгрузить WtsApi32.dll при удалении обновленного пакета

Я создал управляемый загрузчик (wix v3.9.1208.0), который немного похож на установщики Visual Studio/Resharper, который отлично работает в этом:

  1. При установке он устанавливает предварительные условия и устанавливает или пропускает то, что вы выбираете из списка доступных приложений, которые входят в комплект.
  2. Если вы измените, он удалит/пропустит/установит ваш выбор.
  3. Удаление удаляет все необязательные приложения.

Моя проблема заключается в том, что я обновляюсь. Обновляемые приложения устанавливаются без проблем, и даже удаление предыдущего пакета запускается в конце, однако здесь все идет не так. Он доходит до события ApplyComplete, где я вызываю загрузчики InvokeShutdown, а затем он останавливается. Последние несколько строк моего журнала, доходящие до этой точки, выглядят следующим образом с ошибкой в ​​​​конце.

[2950:1B18][2015-02-26T16:03:03]i207: Planned related bundle: {afe9a965-64d2-4656-a968-95ad1ca320a1}, type: Upgrade, default requested: None, ba requested: None, execute: None, rollback: None, dependency: None
[2950:1B18][2015-02-26T16:03:03]i201: Planned package: App1, state: Absent, default requested: Absent, ba requested: Absent, execute: None, rollback: None, cache: No, uncache: No, dependency: Unregister
[2950:1B18][2015-02-26T16:03:03]i201: Planned package: LicenceManager, state: Present, default requested: None, ba requested: None, execute: None, rollback: None, cache: No, uncache: No, dependency: Unregister
[2950:1B18][2015-02-26T16:03:03]i201: Planned package: vcRedistx64, state: Present, default requested: None, ba requested: None, execute: None, rollback: None, cache: No, uncache: No, dependency: None
[2950:1B18][2015-02-26T16:03:03]i201: Planned package: NetFx452Web, state: Present, default requested: None, ba requested: None, execute: None, rollback: None, cache: No, uncache: No, dependency: None
[2950:1B18][2015-02-26T16:03:03]i201: Planned package: dotnetfx35setup.exe, state: Present, default requested: None, ba requested: None, execute: None, rollback: None, cache: No, uncache: No, dependency: None
[2950:1B18][2015-02-26T16:03:03]i000: Executing OnPlanComplete
[2950:1B18][2015-02-26T16:03:03]i299: Plan complete, result: 0x0
[2950:1B18][2015-02-26T16:03:03]i300: Apply begin
[2934:22D0][2015-02-26T16:03:03]i329: Removed package dependency provider: {93F9AE5C-EC11-4122-8F1D-11A4EEDAF4C9}, package: App1
[2934:22D0][2015-02-26T16:03:03]i329: Removed package dependency provider: {2326EAF9-A4C2-4AE0-A22B-8B8640B1A151}, package: LicenceManager
[2950:1B18][2015-02-26T16:03:03]i000: Executing OnExecuteComplete
[2934:22D0][2015-02-26T16:03:03]i330: Removed bundle dependency provider: {41b57ce1-0fc2-4761-9779-fb0dab861ce9}
[2934:22D0][2015-02-26T16:03:03]i352: Removing cached bundle: {41b57ce1-0fc2-4761-9779-fb0dab861ce9}, from path: C:\ProgramData\Package Cache\{41b57ce1-0fc2-4761-9779-fb0dab861ce9}\
[2950:1B18][2015-02-26T16:03:03]i000: Executing OnApplyComplete
[2950:1B18][2015-02-26T16:03:03]i000: OnApplyComplete() - Invoking shutdown due to Action being Uninstall
[2950:20E8][2015-02-26T16:03:03]e000: Unable to load DLL 'WtsApi32.dll': Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Я посмотрел на procmon, чтобы узнать, смогу ли я получить больше информации, и нашел их как последние несколько записей. Ожидается удаление WtsApi32.dll непосредственно перед записью в журнале для заблокированной dll. Выключение пытается произойти слишком рано?

08:01:50.8330216    Bootstrapper.exe    12112   CreateFile  C:\ProgramData\Package Cache\{6ab12c5b-558c-42b4-9f60-958771befc1c}\POWRPROF.DLL    DELETE PENDING  Desired Access: Read Attributes,    Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
08:01:50.8335070    Bootstrapper.exe    12112   CreateFile  C:\Windows\Microsoft.NET\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WtsApi32.dll  NAME NOT FOUND  Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
08:01:50.8336118    Bootstrapper.exe    12112   CreateFile  C:\ProgramData\Package Cache\{6ab12c5b-558c-42b4-9f60-958771befc1c}\WtsApi32.dll    DELETE PENDING  Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
08:01:50.8341131    Bootstrapper.exe    12112   WriteFile   C:\Users\UserName\AppData\Local\Temp\BundleLog_20150227080127.log   SUCCESS Offset: 6,794, Length: 146

Папка пакета, из которой wtsapi32.dll пытается быть удалена, показывает, что доступ запрещен, если я попытаюсь перейти туда в проводнике Windows.


person madmaximillion    schedule 27.02.2015    source источник
comment
Это последнее сообщение об ошибке Unable to load DLL... исходит от вашего БА, верно? Потому что единственная ссылка на wtsapi32.dll в Burn, которую я могу найти, это ifdef'd.   -  person Sean Hall    schedule 28.02.2015


Ответы (1)


оказывается, кто-то прокомментировал мою логику в моем пользовательском переопределении BA Run, чтобы отображать представление в определенных сценариях, а не в других. Поэтому, когда Command.Display был встроен, код пытался отобразить мое представление, и, следовательно, я думаю, что DLL блокировались при завершении работы. Ну хоть причина найдена!

person madmaximillion    schedule 02.03.2015