QuickTime, LocalLow and DuplicateFiles
I've got ActiveSetup running and I can see it's calling the correct components as the HKCU registrys (keys files) are being written. The QTPlayerSession.xml file is being copied to the correct directory. Both files are working with Windows XP using their own seperate components conditioned on VersionNT.
I'm using InstallShield and my Directory table has the following relevant lines
Directory : Directory_Parent : DefaulDir
USERPROFILE : TARGETDIR : .:USERPR~1|UserProfile
APPDATA : USERPROFILE : AppData
LOCALLOW : APPDATA : LocalLow
APPLE_COMPUTER2 : LOCALLOW : APPLEC~1|Apple Computer
QUICKTIME3 : APPLE_COMPUTER2 : QUICKT~1|QuickTime
My DuplicateFiles table has the following
FileKey : Component_ : File_ : DestName : DestFolder
QuickTime.qtpVer6 : QuickTime.qtpVer6 : quicktime.qtp : QuickTime.qtp : QUICKTIME3
I've noticed something strange which is that I 'sometimes' end up with a HKCU\Software\AppDataLow key being created, even though there is nothing like that in the RegistryTable. I've checked the MSI with Orca in case InstallShield was doing something weird, but the tables look correct in there as well.
I'm not sure if it's relevant, but I'm also using the RemoveFile table to clean up the appropriate files as the DuplicateFile table doesn't seem to overwrite files that already exist. I have tried it with and without this row in the table, so I don't think it's the cause of the problem and the order seems to be working fine for the other DuplicateFiles.
FileKey : Component_ : FileName : DirProperty : InstallMode
QuickTime.qtpVer6 : QuickTime.qtpVer6 : QuickTime.qtp : QUICKTIME3 : 1
Thanks for any help you can provide.
Answers (31)
i see several small problems in your package.
1. You have wrong or missing entries in the DIRECTORY, Atributes and KeyPath columns of the component table. Change it like this:
QuickTime.qtp {15490EA5-5B1B-41B2-B266-3A8C3EB52547} QUICKTIME1 4 VersionNT<600 Registry1
QTPlayerSession.xml {F08C0A01-AD31-4AF3-BB57-F06C7A8897C7} QUICKTIME1 4 VersionNT<600 Registry5
UserConfigFiles {EEFB3BA2-237E-40C1-AE7E-59509A5D3DA1} INSTALLDIR 4 Registry2
QuickTime.qtpVer6 {353F539B-4D18-4FA7-914F-E2E5024935F5} QUICKTIME1 4 VersionNT>=600 Registry6
QTPlayerSession.xmlVer6 {24D00738-6782-4A81-8039-D1A80988A48F} QUICKTIME1 4 VersionNT>=600 Registry9
The QUICKTIME3 directory entry should only be used in the Duplicate Files table
2. Read Pieters post above. I think, it might leads in the right direction.
To test this, move the "setUserProfileNT" action in the InstallExecuteSequence to 405 or so.
3. If this stuff runs, consider additional entries in the component and registry tables to create AS-settings on 64bit systems too.
Regards, Nick
Directory : Directory_Parent : DefaulDir
APPDATA1 : ProfilesFolder : AppData
LOCALLOW : APPDATA1 : LocalLow
APPLE_COMPUTER2 : LOCALLOW : APPLEC~1|Apple Computer
QUICKTIME3 : APPLE_COMPUTER2 : QUICKT~1|QuickTime
Create Folder entry QUICKTIME3
Add the qtp file below QUICKT~1|QuickTime folder
Use Active setup to copy the qtp file in user profile
StubPath used is msiexec /fu [Initially i used /fauvs] {ProductCode}
and added the below registry key
[HKEY_CURRENT_USER\Software\Apple Computer, Inc.\QuickTime\LocalUserPreferences]
"FolderPath"="[%USERPROFILE]\AppData\LocalLow\Apple Computer\QuickTime\"
Cheers
MSI_Pack12, what you've done looks the same to me other than that you've added the file to the folder directly whereas I've used the DuplicateFile table to do the copy. I am using /fua currently but will give /fu a go later.
nheim, I don't seem to have that specific CA, but I would guess that setUserProfileNT would be the InstallShield equivalent?? It's set as setUserProfileNT : VersionNT : 960
Sorry, I tried Senduit, but either they're having difficulty or it's one of those many services us poor Aussies don't get access to. However, I've had a look through and I think I can see the cause of the issue, but I'm still not sure why it's doing what it is. A small extract from the log shows properties being set. As you can see, all looks correct as per my Directory table that I posted originally until it gets to setting QUICKTIME3. Although my Directory table says that APPLE_COMPUTER2 (which is set to C:\Users\bgrive01admin\AppData\LocalLow\Apple Computer\) is the Parent directory of QUICKTIME3, QUICKTIME3 gets set to C:\Users\Default\AppData\LocalLow\Apple Computer\QuickTime\.
Any thoughts as to what might be causing this? Thanks again for your help.
Property(S): ALLUSERSPROFILE = C:\ProgramData\
Property(S): USERPROFILE = C:\Users\bgrive01admin\
Property(S): APPDATA = C:\Users\bgrive01admin\AppData\
Property(S): AppDataFolder = C:\Users\bgrive01admin\AppData\Roaming\
Property(S): APPLE_COMPUTER = C:\Users\bgrive01admin\AppData\Roaming\Apple Computer\
Property(S): LocalAppDataFolder = C:\Users\bgrive01admin\AppData\Local\
Property(S): APPLE_COMPUTER1 = C:\Users\bgrive01admin\AppData\Local\Apple Computer\
Property(S): LOCALLOW = C:\Users\bgrive01admin\AppData\LocalLow\
Property(S): APPLE_COMPUTER2 = C:\Users\bgrive01admin\AppData\LocalLow\Apple Computer\
Property(S): ColorBits = 32
Property(S): TextInternalLeading = 3
Property(S): TextHeight = 16
Property(S): BorderSide = 1
Property(S): BorderTop = 1
Property(S): ISYourDataBaseDir = C:\Program Files\QuickTime\Database\
Property(S): DATABASEDIR = C:\Program Files\QuickTime\Database\
Property(S): CaptionHeight = 22
Property(S): ScreenY = 768
Property(S): ScreenX = 1024
Property(S): SystemLanguageID = 3081
Property(S): QUICKTIME = C:\Program Files\QuickTime\
Property(S): INSTALLDIR = C:\Program Files\QuickTime\
Property(S): ComputerName = VM-BGRIVE01-W71
Property(S): UserLanguageID = 3081
Property(S): ProgramFilesFolder = C:\Program Files\
Property(S): UserSID = S-1-5-21-2127881504-3153758514-1054354859-194091
Property(S): LogonUser = BGrive01admin
Property(S): VirtualMemory = 2414
Property(S): PhysicalMemory = 1536
Property(S): Intel = 6
Property(S): ShellAdvtSupport = 1
Property(S): OLEAdvtSupport = 1
Property(S): GPTSupport = 1
Property(S): QUICKTIME1 = C:\Users\bgrive01admin\AppData\Roaming\Apple Computer\QuickTime\
Property(S): QUICKTIME2 = C:\Users\bgrive01admin\AppData\Local\Apple Computer\QuickTime\
Property(S): QUICKTIME3 = C:\Users\Default\AppData\LocalLow\Apple Computer\QuickTime\
C:\Users\Default\AppData\LocalLow\Apple Computer\QuickTime\
are you distributing using some sort of distribution system? Cause this looks alot like the AppData folder the LocalSystem account might use. Is it possible the path gets resolved wrong because of the account that's used to run the installation?
PJ
Silent install for QuickTime 7.71.80.42 for XP
Step 1. Download and Run vendor executable - QuickTimeInstaller.exe
Step 2. Check under %TEMP% there should be 4 msi’s – You can delete AppleSoftwareUpdate.msi as it is not required.
Step 3. I created a .mst for the AppleApplicationSupport.msi and applied our standards. This was installed on aWindows XP SP3 VM and snapped.
Step 4. Installed Quicktime.msi.
Step 5. What we need to do now is apply our preferences. These will manifest themselves in quicktime.qtp file which can be located at [LocalAppDataFolder]Apple Computer\Quicktime. Copy this file to your mst when you have applied you preferences to QuickTime Player and PictureViewer. These should include disabling updates and removing System Tray Icon.
Step 6. I created a separate feature called CG_QTConfig under Setup Design and created a CG_Quicktime.qtp component with a destination of [LocalAppDataFolder]Apple Computer\Quicktime. Here i imported the quicktime.qtp file. Also added HKCU\Software\Apple Computer, Inc.\Quicktime\LocalUserPreferences Name=Auto-Update Date=Disabled. This registry key was set as keypath for the component.
Step 7. Active Setup key added in a new component under newly created feature to ensure replication to all users.
Step 8: The following step copied from - http://www.bdts.com.au/tips-and-resources/48-msi-packaging/74-deploy-quicktime-765.html
Change QT_TRAY_ICON from #2 to #0 - this will disable the tray icon (the blue Q by the clock)Not True but left it so .
Change the AdminProperties from:
DESKTOP_SHORTCUTS; PROGRAMMENUNAME; QT_TRAY_ICON; QTJAVADIR; QTPROGRAMMENUFOLDERNAME; SCHEDULE_ASUW
to
PROGRAMMENUNAME;QTJAVADIR;QTPROGRAMMENUFOLDERNAME
This will disable the desktop shortcuts, the tray icon, and the automatic updates.
Change SCHEDULE_ASUW from 1 to 0
Change the SecureCustomProperties from:
APPLEAPPLICATIONSUPPORTISINSTALLED; APPLEAPPLICATIONSUPPORTWISINSTALLED; ASUWISINSTALLED; BNEWERPRODUCTISINSTALLED; DESKTOP_SHORTCUTS; EXISTINGINSTALLDIR; EXISTINGPROGRAMMENUNAME; EXISTINGQTCOMPONENTS; EXISTINGQTEXTENSIONS; EXISTINGQTJAVADIR; EXISTINGQTSYSTEM; INSTALLDIR; ISACTIONPROP1; ITUNES70_801_INSTALLED; PROGRAMMENUNAME; QT7PP1INSTALLED; QTINFO.BISQTPRO; QTINFO.BITUNESHELPERRUNNING; QTINFO.BNEWERQTISINSTALLED; QTINFO.BOLDERQTISINSTALLED; QTINFO.BQTISINSTALLED; QTINFO.BSETDONOTLOADFROMBUILDRESULTS; QTINFO.BUPGRADEWOULDINVALIDATEPROKEY; QTINFO.BUYQTPROURL; QTINFO.CURRENTQTINSTALLPATH; QTINFO.CURRENTQTMACVERSNUM_BASE10; QTINFO.CURRENTQTPROCESSCOUNT; QTINFO.CURRENTQTVERSNUM; QTINFO.CURRENTQTVERSNUM_BASE10; QTINFO.CURRENTQTVERSSTR; QTINFO.EXISTINGQTVERSNUM; QTINFO.EXISTINGQTVERSSTR; QTINFO.QTPROREGNAME; QTINFO.QTPROREGNUMBER; QTJAVADIR; QTPLUGINOCXFOLDER; QTPROGRAMMENUFOLDERNAME; REGSRCH_DESKTOP_SHORTCUTS; REGSRCH_ITUNESHELPER_PATH; REGSRCH_QT_TRAY_ICON; SCHEDULE_ASUW; UPGRADEFOUND; UPGRADING750; UPGRADING755
to
APPLEAPPLICATIONSUPPORTISINSTALLED; APPLEAPPLICATIONSUPPORTWISINSTALLED; BNEWERPRODUCTISINSTALLED; DESKTOP_SHORTCUTS; EXISTINGINSTALLDIR; EXISTINGPROGRAMMENUNAME; EXISTINGQTCOMPONENTS; EXISTINGQTEXTENSIONS; EXISTINGQTJAVADIR; EXISTINGQTSYSTEM; INSTALLDIR; ISACTIONPROP1; ITUNES70_801_INSTALLED; PROGRAMMENUNAME; QT7PP1INSTALLED; QTINFO.BISQTPRO; QTINFO.BITUNESHELPERRUNNING; QTINFO.BNEWERQTISINSTALLED; QTINFO.BOLDERQTISINSTALLED; QTINFO.BQTISINSTALLED; QTINFO.BSETDONOTLOADFROMBUILDRESULTS; QTINFO.BUPGRADEWOULDINVALIDATEPROKEY; QTINFO.BUYQTPROURL; QTINFO.CURRENTQTINSTALLPATH; QTINFO.CURRENTQTMACVERSNUM_BASE10; QTINFO.CURRENTQTPROCESSCOUNT; QTINFO.CURRENTQTVERSNUM; QTINFO.CURRENTQTVERSNUM_BASE10; QTINFO.CURRENTQTVERSSTR; QTINFO.EXISTINGQTVERSNUM; QTINFO.EXISTINGQTVERSSTR; QTINFO.QTPROREGNAME; QTINFO.QTPROREGNUMBER; QTJAVADIR; QTPLUGINOCXFOLDER; QTPROGRAMMENUFOLDERNAME; REGSRCH_DESKTOP_SHORTCUTS; REGSRCH_ITUNESHELPER_PATH; UPGRADEFOUND; UPGRADING750; UPGRADING755
Note: the lines above should not have spaces in them, I inserted a space after each ; so it wrapped nicely for the web. You can easily remove the spaces by copying the text into notepad, and replace all "; " with ";"
Optional: I like to change the ProductName field to "QuickTime 7.71.80.42" so users can see which version is being installed / removed.
Make the following change to the CheckBox table:
Change ChkOptInstASU from 1 to 0 - this settings disabled the apple software update.
Make the following change to the Shortcut table:
Drop the "QuickTimeUninstaller" row - this will prevent the uninstaller shortcut from being created.
Drop the "QuickTimePlayer_Desktop" row - this will prevent the desktop shortcut being created.
Make the following change to the LaunchCondition table:
Drop the "NOT BNEWERPRODUCTISINSTALLED" row - I found that if you don't do this the install will fail, indicating that a newer version is installed (even if there's not!)
From the Orca menu, click View -> Summary Information
Delete all the numbers except for 1033 from the languages box (1033 is English). Click OK.
Step 9. In Property Table change the following – REGSRCH_DESKTOP_SHORTCUTS to 0, SCHEDULE_ASUW to 0, INSTALL_ASUW to 0, ISSETUPDRIVEN to 1.
Step 10. Added the following HKCU keys to uphold consistency of .gif, .jpg, and, .png files
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png]"Progid"="pngfile"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithProgids] "QuickTime.png"=hex: "pngfile"=hex:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\OpenWithList] "b"="shimgvw.dll" "MRUList"="ba" "a"="mspaint.exe"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gif] "Progid"="giffile"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gif\OpenWithProgids] "QuickTime.gif"=hex: "giffile"=hex:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gif\OpenWithList] "b"="shimgvw.dll" "MRUList"="ba" "a"="mspaint.exe"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg] "Progid"="jpegfile"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithProgids] "jpegfile"=hex: "QuickTime.jpg"=hex:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithList] "b"="shimgvw.dll" "a"="mspaint.exe" "MRUList"="ba"
Step 11. In installed what i had done up to now to see if the System Tray Icon had removed but alas it had not. Some frustrating ‘googleing’ suggested to me to do the following: Create a new component under newly created feature, obtain from your installation up to now and add file com.apple.Quicktime.plist to C:\Documents and Settings\All Users\Aplication Data\Apple Computer\Quicktime.
System Tray Icon still exists.
Step 12. In the QuickTimeInternet feature there is a component called QTPlugin.ocx. In here locate the regkey [HKLM\SOFTWARE\Apple Computer, Inc.\QuickTime\ActiveX] QTTaskRunFlags=[QT_TRAY_ICON] . This needs to be changed to a DWORD regkey [HKLM\SOFTWARE\Apple Computer, Inc.\QuickTime\ActiveX] QTTaskRunFlags=2
This last step has removed the System Tray Icon.
The other QUICKTIME properties are set using the builtin variables LocalAppDataFolder and AppDataFolder and these are working as expected.
MSI (s) (00:A8) [10:37:11:633]: PROPERTY CHANGE: Modifying QUICKTIME3 property. Its current value is 'C:\Users\Default\AppData\LocalLow\Apple Computer\QuickTime'. Its new value: 'C:\Users\Default\AppData\LocalLow\Apple Computer\QuickTime\'.
Same goes for APPLE_COMPUTER2, it's always set correctly.
MSI (s) (00:A8) [10:37:11:633]: PROPERTY CHANGE: Adding APPLE_COMPUTER2 property. Its value is 'C:\Users\bgrive01admin\AppData\LocalLow\Apple Computer\'.
Directory Directory_Parent DefaultDir
s72 S72 l255
Directory Directory
ALLUSERSPROFILE TARGETDIR .:ALLUSE~1|All Users
APPDATA USERPROFILE AppData
APPLE_COMPUTER AppDataFolder APPLEC~1|Apple Computer
APPLE_COMPUTER1 LocalAppDataFolder APPLEC~1|Apple Computer
APPLE_COMPUTER2 LOCALLOW APPLEC~1|Apple Computer
AppDataFolder TARGETDIR .:APPLIC~1|Application Data
DATABASEDIR ISYourDataBaseDir .
INSTALLDIR QUICKTIME .
ISYourDataBaseDir INSTALLDIR Database
LOCALLOW APPDATA LocalLow
LocalAppDataFolder TARGETDIR .:LocalA~1|LocalAppData
ProgramFilesFolder TARGETDIR .:PROGRA~1|program files
QUICKTIME ProgramFilesFolder QUICKT~1|QuickTime
QUICKTIME1 APPLE_COMPUTER QUICKT~1|QuickTime
QUICKTIME2 APPLE_COMPUTER1 QUICKT~1|QuickTime
QUICKTIME3 APPLE_COMPUTER2 QUICKT~1|QuickTime
SystemFolder TARGETDIR .:System32
TARGETDIR SourceDir
USERPROFILE TARGETDIR .:USERPR~1|UserProfile
The repair command line is: msiexec /fua {BD9DD2F8-202B-46B6-A115-82768FE485DE} /log quicktime.log /qb
I've tested using ALLUSERS=2 and ALLUSERS=0 without any difference.
If I install the MSI as a different Admin account (bgrive01test) and then run the repair in another account (bgrive01admin), the USERPROFILE property is set to C:\Users\bgrive01test. I can see that the repair is working as the file is restored after being deleted, it's just installing to the wrong profile.
Hopefully someone can tell me why the USERPROFILE property is not correctly set to the user's profile and appears to instead remembers the profile of the account that installed the MSI. This is different behaviour to properties such as AppDataFolder.
don't you think 3 times is enough?
This registry key, you mention is only necessary, if you have your quicktime.qtp file in a non-default location.
But this isn't the case here! So it is just plain useless!
Brett's problem is about a behaviour in a new MSI, he has built for this purpose.
Sorry for being rude, but i can't stand this anymore...
Regards, Nick
I'm not sure if you had something in mind that I should be adding for 64 bit OSs, but all the configurations seem to be working on x64 without any modifications.
Thanks again to Nick and all others that helped out.
glad to see it works now.
About the 64bit thing:
AS does not work out of the box on a 64bit system, because all registry settings from a 32bit app go to the x86 branch.
Therefore, you need an extra 64bit component, which creates the AS-registry entries on a 64 bit system.
That would require the following extra entries in your test app:
in the component table:
ActiveSetup64 {GUID-here} INSTALLDIR 260 VersionNT64 Reg64_3
in the feature components table:
UserConfig ActiveSetup64
in the Registry table:
Reg64_1 2 SOFTWARE\Microsoft\Active Setup\Installed Components\Apple QuickTime Config Apple QuickTime Config 1.0 ActiveSetup64
Reg64_2 2 SOFTWARE\Microsoft\Active Setup\Installed Components\Apple QuickTime Config StubPath msiexec /fua {FDD9CA58-DF6B-40BA-806E-2E4B3072DA62} /qn ActiveSetup64
Reg64_3 2 SOFTWARE\Microsoft\Active Setup\Installed Components\Apple QuickTime Config Version 1,1 ActiveSetup64
That should do the trick.
Regards, Nick
As this particular install only has files that install to the %programfiles(x86)% area and the user area which is 32 / 64 bit independent, it looks like I can get away without having the 64 bit component. It just puts the AS in HKLM\SOFTWARE\Wow6432Node\Microsoft\Active Setup rather than HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup but it seems to work fine.
Is there any reason that I should mess with something that is now not broken?
good question, but you can test it yourself.
The registry entries are nicely installed into the WOW branch, but will just sit there an do nothing.
To get AS going on 64bit systems, the AS-regkeys have to go to HKLM/Software/Microsoft/Active Setup.
And this needs a 64bit component, like i suggested in my previous post.
Quicktime is a pretty good example here, because it is 32bit only, but iTunes, which needs it as a prerequisite, has 32 and 64bit versions.
We do this for all 32bit apps which have AS.
Hope, this clears that a bit.
Regards, Nick
I've only tested on Win7 x64 myself, but I'm not seeing the behaviour your describing. On my system the AS is installed to the WOW branch as mentioned previously, but the OS does seem to run this on logon as expected. I can see the HKCU entries which are again located in the WOW branch, but the MSI has most definately repaired itself. I can see that the HKCU AS keys, the key registry entries used for the file components and the files themselves have all been recreated (deleted prior to log off / on).
Brett
so that the conversation will remain readable.