Добавить программы удаления показывают увеличенный размер после каждого REINSTALL моего продукта msi - программирование

Добавить программы удаления показывают увеличенный размер после каждого REINSTALL моего продукта msi

Когда мое приложение запущено, оно подключается к онлайн-репозиторию и проверяет, доступна ли более высокая версия. Если доступна более высокая версия, она загружает MSI и выполняет обновление (например, небольшое обновление с использованием другой версии продукта). После завершения обновления он работает нормально.

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

Я использую MsiInstallProduct (msiFile, cmdLine) для повторной установки. "cmdline": ALLUSERS = 1 REINSTALLMODE = vamus REINSTALL = ВСЕ CONFIGURATIONFILE = C:\ProgramData\myapp\ngsetup.ini

Я заметил следующие подозрительные вещи в Verbose msi log:

  • Во время обновления мое приложение запускает процесс ngupdate.exe в фоновом режиме, который использует 2 dlls (ngcommon.dll и ngevent.dll). Может ли это быть причиной увеличения размера ARP?

Лог-фрагмент:

:
MSI (s) (1C:6C) [10:16:21:958]: Executing op: SetTargetFolder(Folder=C:\Windows\system32\)
MSI (s) (1C:6C) [10:16:21:958]: Executing op: SetSourceFolder(Folder=1\SYSTEM~1\|System Folder\)
MSI (s) (1C:6C) [10:16:21:958]: Executing op: RegisterSharedComponentProvider(,,File=_B08FC512AED74917BAF4D6EAF379944E,Component={2DE76099-CD98-FD91-F426-2B97BB134A59},ComponentVersion=11.2.0.118,ProductCode={A2A78788-2792-49BF-AF22-5E9296E568F3},ProductVersion=11.20.118,PatchSize=0,PatchAttributes=0,PatchSequence=0,SharedComponent=0,IsFullFile=0)
MSI (s) (1C:6C) [10:16:21:964]: Executing op: FileCopy(SourceName=NGCOMMON.DLL|ngcommon.dll,SourceCabKey=_B08FC512AED74917BAF4D6EAF379944E,DestName=ngcommon.dll,Attributes=512,FileSize=182056,PerTick=65536,,VerifyMedia=1,,,,,CheckCRC=0,Version=11.2.0.118,Language=1033,InstallMode=130023424,,,,,,,)
MSI (s) (1C:6C) [10:16:21:965]: File: C:\Windows\system32\ngcommon.dll; Overwrite;  Won't patch;    REINSTALLMODE specifies all files to be overwritten
MSI (s) (1C:6C) [10:16:21:965]: Source for file '_B08FC512AED74917BAF4D6EAF379944E' is compressed
MSI (s) (1C:6C) [10:16:21:965]: Re-applying security from existing file.
MSI (s) (1C:6C) [10:16:21:966]: Note: 1: 2262 2: Error 3: -2147287038 
MSI (s) (1C:6C) [10:16:22:324]: Product: My App. The file C:\Windows\system32\ngcommon.dll is being used by the following process: Name: ngupdate , Id 3104.
MSI (s) (1C:6C) [10:16:22:326]: Verifying accessibility of file: ngcommon.dll
MSI (s) (1C:6C) [10:16:22:332]: Executing op: FileCopy(SourceName=NGHELP.CHM|nghelp.chm,SourceCabKey=_C8D0297F24AD4BA5A9D4AAA0D3BAC0CC,DestName=nghelp.chm,Attributes=512,FileSize=90244,PerTick=65536,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=130023424,,,,,,,)
MSI (s) (1C:6C) [10:16:22:333]: File: C:\Windows\system32\nghelp.chm;   Overwrite;  Won't patch;    REINSTALLMODE specifies all files to be overwritten
MSI (s) (1C:6C) [10:16:22:333]: Source for file '_C8D0297F24AD4BA5A9D4AAA0D3BAC0CC' is compressed
MSI (s) (1C:6C) [10:16:22:333]: Re-applying security from existing file.
MSI (s) (1C:6C) [10:16:22:335]: Verifying accessibility of file: nghelp.chm
MSI (s) (1C:6C) [10:16:22:339]: Executing op: SetTargetFolder(Folder=C:\Windows\)
MSI (s) (1C:6C) [10:16:22:339]: Executing op: SetSourceFolder(Folder=1\WINDOW~1\|Windows Folder\)
MSI (s) (1C:6C) [10:16:22:339]: Executing op: RegisterSharedComponentProvider(,,File=_DDBE1E1CB35A4E12AB1FA25F9D72738D,Component={30F988F9-ED4E-07C5-C3C3-30FECE7447FF},ComponentVersion=11.2.0.118,ProductCode={A2A78788-2792-49BF-AF22-5E9296E568F3},ProductVersion=11.20.118,PatchSize=0,PatchAttributes=0,PatchSequence=0,SharedComponent=0,IsFullFile=0)
MSI (s) (1C:6C) [10:16:22:345]: Executing op: FileCopy(SourceName=NGEVENT.DLL|ngevent.dll,SourceCabKey=_DDBE1E1CB35A4E12AB1FA25F9D72738D,DestName=ngevent.dll,Attributes=512,FileSize=64296,PerTick=65536,,VerifyMedia=1,,,,,CheckCRC=0,Version=11.2.0.118,Language=1033,InstallMode=130023424,,,,,,,)
MSI (s) (1C:6C) [10:16:22:346]: File: C:\Windows\ngevent.dll;   Overwrite;  Won't patch;    REINSTALLMODE specifies all files to be overwritten
MSI (s) (1C:6C) [10:16:22:346]: Source for file '_DDBE1E1CB35A4E12AB1FA25F9D72738D' is compressed
MSI (s) (1C:6C) [10:16:22:347]: Re-applying security from existing file.
MSI (s) (1C:6C) [10:16:22:347]: Note: 1: 2262 2: Error 3: -2147287038 
MSI (s) (1C:6C) [10:16:22:348]: Product: My App. The file C:\Windows\ngevent.dll is being used by the following process: Name: ngupdate , Id 3104.
MSI (s) (1C:6C) [10:16:22:350]: Verifying accessibility of file: ngevent.dll
MSI (s) (1C:6C) [10:16:22:354]: Executing op: SetTargetFolder(Folder=C:\Program Files\myapp\Install\)
MSI (s) (1C:6C) [10:16:22:354]: Executing op: SetSourceFolder(Folder=1\INSTALL\|Install\)
:
  1. Из журналов в ProductRegister (...,) появляется параметр "EstimatedSize = 1776". Связано ли это с проблемой увеличения размера в ARP? Что он делает?

Сводка журнала:

MSI (s) (1C:F8) [10:16:22:449]: Created Custom Action Server with PID 1176 (0x498).
MSI (s) (1C:B4) [10:16:22:475]: Running as a service.
MSI (s) (1C:B4) [10:16:22:477]: Hello, I'm your 32bit Elevated custom action server.
MSI (s) (1C:6C) [10:16:29:059]: Executing op: ActionStart(Name=RegisterProduct,Description=Registering product,Template=[1])
MSI (s) (1C:6C) [10:16:29:059]: Executing op: ChangeMedia(,MediaPrompt=Please insert the disk: ,MediaCabinet=_B80BF92501A9CB366CEFEB8C382A3536,BytesPerTick=0,CopierType=2,ModuleFileName=C:\Windows\Installer\1e88d181.msi,,,,,IsFirstPhysicalMedia=1)
MSI (s) (1C:6C) [10:16:29:059]: Executing op: DatabaseCopy(DatabasePath=C:\Windows\Installer\1e88d181.msi,ProductCode={A2A78788-2792-49BF-AF22-5E9296E568F3},,,)
MSI (s) (1C:6C) [10:16:29:061]: Verifying accessibility of file: 1e88d180.msi
MSI (s) (1C:6C) [10:16:29:074]: File will have security applied from OpCode.
MSI (s) (1C:6C) [10:16:29:079]: Executing op: ProductRegister(UpgradeCode={81E3FF66-F6BB-49D7-A544-2FF3353BC128},VersionString=11.20.118,HelpLink=https://help.myapp.com/help.asp,,,InstallSource=C:\ProgramData\myapp\,Publisher=App Inc.,URLInfoAbout=http://www.myapp.com/us/en/support/contact.html#e-class,,,,,,,Contact=App Inc.,,,,EstimatedSize=1776,,,,)
MSI (s) (1C:6C) [10:16:29:084]: Executing op: ProductCPDisplayInfoRegister()
MSI (s) (1C:6C) [10:16:29:086]: Executing op: ActionStart(Name=PublishFeatures,Description=Publishing Product Features,Template=Feature: [1])
MSI (s) (1C:6C) [10:16:29:086]: Executing op: FeaturePublish(Feature=DefaultFeature,,Absent=2,Component=c-?rk6J{f`&VZ0V-m239QWWxn`42T!4sSaIbbqY$%@s+O!{e,ph8~k4Wa^db=K8^)f(XvC.[Z?4[1voA[7dAyT[uBZFb[[email protected][=ptVPS'k94kxu_4f(ROJYf+,KX=m(T.q&t7Wyg9RpF3Ov)[email protected][{1iy=Oh9nB5F`QG66mtjyXbeECC5(@Wm72Bd(t(CJFEv4bPNG&vGUTovbUqYauSv[[email protected]=3!3+7Nq5)taHoE3t`T2w')&LTx?SSIjTvjERXC[Av(gc6=O]f.GGO)Ia7J+o=Q?P~^eP-%,oc)B~[fpsD}[email protected]&+utmClhlX.l_E.rMjs$+*P-'?Z.VBu)[email protected]^'yZRu87v3bQ6?h3U&i2tF8Rz[[email protected]!eA[iHgB&S*%P99eBR(%Wxg3,*FR%0=5dz^4y&{izS_KJ=(dZo%i0Pboj'$[3&laN']V-wYa.k*@c$jM}`.J[[email protected],Sl^[[email protected]*03wMC]@qrXyqA^N)
MSI (s) (1C:6C) [10:16:29:088]: Executing op: ActionStart(Name=PublishProduct,Description=Publishing product information,)
MSI (s) (1C:6C) [10:16:29:088]: Executing op: PackageCodePublish(PackageKey={5C921CC3-02D7-4BDF-BC56-6E2853B5E4FF})
MSI (s) (1C:6C) [10:16:29:088]: Executing op: CleanupConfigData()
MSI (s) (1C:6C) [10:16:29:088]: Executing op: RegisterPatchOrder(Continue=0,SequenceType=1,Remove=0)
MSI (s) (1C:6C) [10:16:29:090]: Executing op: ProductPublishUpdate()
MSI (s) (1C:6C) [10:16:29:091]: Executing op: SourceListRegisterLastUsed(SourceProduct={A2A78788-2792-49BF-AF22-5E9296E568F3},LastUsedSource=C:\ProgramData\myapp\)
MSI (s) (1C:6C) [10:16:29:091]: Entering CMsiConfigurationManager::SetLastUsedSource.
:
:

благодарив, Кунал

4b9b3361

Ответ 1

Проекты настройки Visual Studio полны ошибок - они всегда были. Я серьезно предлагаю вам немедленно перейти на Wix и потратить время на его изучение. Вы сбережете себе много горя и проблем.

В наборе инструментов Wix есть инструмент dark.exe, который позволяет декомпилировать существующую MSI в исходный XML файл Wix. С некоторой очисткой вы можете использовать декомпилированный источник XML в качестве основы для вашего нового пакета Wix (требуется умение вырезать и вставить палочку и понимание MSI). Wix является полнофункциональным и надежным, проекты Visual Studio - это не так, и вы продолжаете сталкиваться со всеми ограничениями.

Примечание для декомпиляции VSPROJ - попытайтесь устранить все элементы GUI и соединитесь со стандартным типом Wix GUI, чтобы избежать осложнений. См. Этот вопрос: Как добавить дополнительный набор инструментов для WiX и этот учебник.

На базовом уровне вы можете получить обычный графический интерфейс Wix-установщика, вставив этот XML-код Wix:

<UIRef Id="WixUI_Minimal" />

Это связывает MSI с графическим интерфейсом по умолчанию, который достаточно хорош для вашего установщика, если вам не нужен специальный диалог. Таким образом, усилия с декомпилированным VSPROJ MSI состоят в том, чтобы найти элементы GUI, удалить весь сегмент и вставить ссылку на один из линий GUI. Готово. Чем больше вы знаете установщика Windows, тем проще выполнить эту очистку.

Несколько других статей с дополнительными предложениями и ссылками Wix (большинство из них старше):