2014-11-13 3 views
0

응용 프로그램을 실행하면 온라인 저장소에 연결되어 더 높은 버전이 있는지 확인합니다. 상위 버전을 사용할 수있는 경우 MSI를 다운로드하고 업그레이드를 수행합니다 (즉, 다른 제품 버전을 사용하여 보조 업데이트를 수행함). 업그레이드가 완료되면 정상적으로 실행됩니다.제거 프로그램 추가 내 msi 제품을 다시 설치할 때마다 크기가 늘어납니다.

문제는 ARP가 업그레이드 할 때마다 내 제품의 크기가 증가한 것입니다. 각 업그레이드 후에 크기가 누적됩니다. 내 응용 프로그램 폴더 및 다른 대상 폴더에있는 모든 다시 설치된 파일을 검사했지만 중복 파일이나 추가 로그 파일이 없었습니다.

MsiInstallProduct (msiFile, cmdLine)를 사용하여 다시 설치합니다. '있는 CmdLine은'이다 : ALLUSERS = 1 REINSTALLMODE = vamus REINSTALL = ALL CONFIGURATIONFILE = C : \ 경우 ProgramData \ MyApp를 \ ngsetup.ini I는 자세히 MSI 로그에 의심스러운 물건이 관찰

:

  1. 업그레이드 중 , 내 응용 프로그램은 2 dll (ngcommon.dll 및 ngevent.dll)을 사용하는 백그라운드에서 프로세스 ngupdate.exe를 시작합니다. 이것이 ARP의 크기 증가의 이유가 될 수 있습니까?

로그 스 니펫 (snippet) :

: 
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에 (...) 매개 변수 "= 1776 EstimatedSize"가입니다. 이것은 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. 
: 
: 

덕분에, 쿠날은

+0

당신은 윅스,하면 Installshield 또는 다른 도구를 사용하여 MSI를 컴파일하고 있는가? –

+0

VS2005 vdproj를 사용하여 msi를 빌드하고 있습니다. – Kunal

답변

4

비주얼 스튜디오 설치 프로젝트는 버그의 가득 차있다 - 그들은 항상 있었다. 즉시 Wix으로 전환하고 학습하는 데 시간을 할애하는 것이 좋습니다. 당신은 많은 슬픔과 문제를 스스로 해결할 것입니다.

Wix 툴킷에는 기존 MSI를 Wix 소스 XML로 디 컴파일 할 수있는 dark.exe이라는 도구가 있습니다. 일부 정리 작업을 수행하면 디 컴파일 된 XML 소스를 새로운 Wix 패키지의 기초로 사용할 수 있습니다 (약간의 잘라 내기 및 붙여 넣기 스킬과 MSI 통찰력이 필요함). Wix는 완전한 기능을 갖추고 신뢰할 수 있으며 Visual Studio 프로젝트는 그렇지 않으며 계속해서 모든 종류의 제한을 준수 할 것입니다.

디 컴파일 된 VSPROJ에 대한 메모 - 모든 GUI 요소를 제거하고 표준 Wix GUI 유형과 연결하여 복잡한 작업을 피하십시오. 이 질문은 How can I add an optional UI to WiX toolsetthis tutorial입니다.

<UIRef Id="WixUI_Minimal" /> 

이 사용자 정의 대화 상자를 필요로하지 않는 한 설치를위한 충분 기본 GUI와 함께 MSI 링크 :

은 기본적인 수준에서이 윅스 XML을 삽입하여 정상적인 설치 윅스 GUI를 얻을 수 있습니다 . 따라서 디 컴파일 된 VSPROJ MSI의 노력은 GUI 요소를 찾고 전체 세그먼트를 삭제하고 위의 하나의 라이너 GUI 링크를 삽입하는 것입니다. 끝난. Windows Installer를 많이 사용할수록이 정리 작업을 더 쉽게 수행 할 수 있습니다.

더 윅스 제안 및 링크 다른 기사의 커플 (가장 오래된) :

관련 문제