Стандартный загрузчик WiX не запускается должным образом при удалении из SystemSettings.exe - PullRequest
0 голосов
/ 20 сентября 2019

Я устанавливаю стандартный загрузчик WiX для установки нескольких пакетов в цепочку.Загрузчик отображается в списке установленных приложений и функций.Я могу использовать эту запись для удаления нашего программного обеспечения на большинстве систем, но на других ничего не происходит после подтверждения того, что я хочу разрешить изменения в системе.

При сравнении с другим ПК (оба Win 10, разные редакции).) где процесс удаления запускается правильно, я обнаружил, что командные строки запущенного процесса install.exe различаются, см. этот снимок экрана Process Explorer для работающего случая и этот снимок экрана неисправного случая .В последнем случае окно установки не отображается, и install.exe не загружает несколько DLL-библиотек, которые в противном случае были бы загружены, например CoreMessaging.dll, CoreUIComponents.dll, explorerframe.dll и т. Д.

Так что по какой-то причинеисполняемый файл копируется из его местоположения в кэше пакетов во временную папку Windows.Если я открою командную оболочку и перейду во временную папку, я смогу нормально запустить install.exe / uninstall.

Почему система копирует установщик во временную папку?Как я могу отладить это - я не могу найти ничего в системном журнале событий, и журнал загрузчика заканчивается через несколько строк, когда сообщается о местоположении файла журнала.

Большое спасибо за вашу помощь!

С уважением, Хольгер

Редактировать 1:

Учитывая, что выполнение из кэша пакетов из временной папки Windows не имеет значения для этой проблемы,Я прикрепил отладчик, используя отладочные символы записи.В проблемном случае основной поток застревает в UiCreateMessageWindow в строке 63:

// Wait for either the thread to be initialized or the window to exit / fail prematurely.
::WaitForMultipleObjects(countof(rgWaitHandles), rgWaitHandles, FALSE, INFINITE);

Edit 2:

Это стек вызовов потока, которыйвызов WaitForMultipleObjects ожидает:

ntdll.dll!_NtAlpcSendWaitReceivePort@32()   Unknown
rpcrt4.dll!LRPC_BASE_CCALL::SendReceive()   Unknown
rpcrt4.dll!NdrClientCall2() Unknown
rpcrt4.dll!_NdrClientCall4()    Unknown
combase.dll!CRpcResolver::ServerRegisterOXID(const tagOXID_INFO & oxidInfo, unsigned __int64 * poxid, unsigned long * pcOidsToAllocate, unsigned __int64 * arNewOidList) Line 1109  C++
combase.dll!OXIDEntry::RegisterOXIDAndOIDs(unsigned long * pcOids, unsigned __int64 * pOids) Line 1598  C++
combase.dll!OXIDEntry::AllocOIDs(unsigned long * pcOidsAlloc, unsigned __int64 * pOidsAlloc, unsigned long cOidsReturn, unsigned __int64 * pOidsReturn) Line 1639   C++
combase.dll!CComApartment::CallTheResolver() Line 862   C++
combase.dll!CComApartment::InitRemoting() Line 1141 C++
combase.dll!InitChannelIfNecessary() Line 1492  C++
combase.dll!CGIPTable::RegisterInterfaceInGlobalHlp(IUnknown * pUnk, const _GUID & riid, unsigned long mshlflags, unsigned long * pdwCookie) Line 798   C++
combase.dll!CGIPTable::RegisterInterfaceInGlobal(IUnknown * pUnk, const _GUID & riid, unsigned long * pdwCookie) Line 759   C++
propsys.dll!CApartmentLocalObject::_RegisterInterfaceInGIT()    Unknown
propsys.dll!CApartmentLocalObject::_SetApartmentObject(struct IUnknown *)   Unknown
propsys.dll!CApartmentLocalObject::SetApartmentObject(struct IUnknown *)    Unknown
propsys.dll!PSCoerceToCanonicalValue()  Unknown
windows.storage.dll!AssocCoerceKinds()  Unknown
windows.storage.dll!_AssocGetKindsForExtension@12() Unknown
windows.storage.dll!CFileAssocList::InitializeWithExtension(unsigned short const *) Unknown
windows.storage.dll!AssocCreateListForFile()    Unknown
windows.storage.dll!AssocCreateForFile()    Unknown
windows.storage.dll!CFileSysItemString::_EnsureAssocArray() Unknown
windows.storage.dll!CFSFolder::_GetNormalDisplayName()  Unknown
windows.storage.dll!CFSFolder::GetDisplayNameOf()   Unknown
shell32.dll!_DisplayNameOfW@20()    Unknown
shell32.dll!_GetFileInfoSections()  Unknown
shell32.dll!SHGetFileInfoW()    Unknown
shell32.dll!_SHGetFileInfoWStub@20()    Unknown
comdlg32.dll!_GetFileTitleX@12()    Unknown
comdlg32.dll!_GetFileTitleW@12()    Unknown
tiptsf.dll!CImmersiveFocusTracker::_IsWinJSApp(void)    Unknown
tiptsf.dll!CImmersiveFocusTracker::CImmersiveFocusTracker(void) Unknown
tiptsf.dll!`dynamic initializer for 'CImmersiveFocusTracker::s_theTracker''()   Unknown
msvcrt.dll!__initterm() Unknown
tiptsf.dll!__CRT_INIT@12()  Unknown
tiptsf.dll!__DllMainCRTStartup()    Unknown
ntdll.dll!_LdrxCallInitRoutine@16() Unknown
ntdll.dll!LdrpCallInitRoutine() Unknown
ntdll.dll!LdrpInitializeNode()  Unknown
ntdll.dll!LdrpInitializeGraphRecurse()  Unknown
ntdll.dll!LdrpPrepareModuleForExecution()   Unknown
ntdll.dll!LdrpLoadDllInternal() Unknown
ntdll.dll!LdrpLoadDll() Unknown
ntdll.dll!LdrLoadDll()  Unknown
KernelBase.dll!LoadLibraryExW() Unknown
user32.dll!__ClientLoadLibrary()    Unknown
ntdll.dll!_KiUserCallbackDispatcher@12()    Unknown
user32.dll!CreateWindowInternal()   Unknown
user32.dll!_CreateWindowExW@48()    Unknown
install.exe!ThreadProc(void * pvContext) Line 138   C++
kernel32.dll!@BaseThreadInitThunk@12()  Unknown
ntdll.dll!__RtlUserThreadStart()    Unknown
ntdll.dll!__RtlUserThreadStart@8()  Unknown
...