Quicktime 7.2 Preferences issue

We're just doing our yearly image refresh and are hitting a problem in the multi-user environment with the quicktime install. The preferences file we copy appears to be ignored.

We install on a reference machine Quicktime 7.2, configure the player (to turn off automatic updates, notifications etc..) and save the preferences file to package folder. We install on our target workstations with the following script,

The problem is new users get the mime-type association prompt and have the default settings.. autoupdates turned on etc..

What we have noticed is that 7.2 differs from 6.5.2 (the last version of quicktime we had deployed) in that 7.2 has a HKCU setting to reference a prefs file in LocalSettings\Application Data\Apple Computer\Quicktime. It seems this preference file does not like being copied between user accounts. Configuring this prefs and copying to a new account causes Quicktime to overwrite it with default settings.

What I did was install this fresh on a computer, made all the changes in my profile, then copied the above files off to the network. You can either put them in a distribution script, or slip them into a transform. In our case the systems are all frozen with DeepFreeze, so all I did was copy the user-specific files into Default User and every new user every day gets the files. The way I've got it set up, it goes straight into the player - no nags, no ads, no media center, nothing.

Hi folks,
we change quite a lot of things on the 'Quicktime.msi' to make it mass-deployable.

Important: Be aware, that the config files lay on other places in Vista!
'QuickTime.qtp' in %USERPROFILE%\AppData\LocalLow
'QTPlayerSession.xml' in %USERPROFILE%\AppData\Roaming\Apple Computer\QuickTime
'com.apple.QuickTime.plist' in C:\ProgramData\Apple Computer\QuickTime

Therefore, you either make two releases for Vista and pre Vista or implement conditions to handle this stuff.
We went the second route and use a custom action to alter the 'DuplicateFile table' according to the OS.
We use the the 'DuplicateFile table' to install 'QTPlayerSession.xml' + 'QuickTime.qtp'.
This installs this files to a subdir on INSTALLDIR and copies them over to the profile each time a user logs into his profile the first time after the installation.
With this, there is no access to a cab file and the source and you have much quicker installs for the user settings in each profile.
The profile part is triggered by an 'Active Setup' entry with version info.

can you please expand on what you 'triggered' in Active Setup? A repair, a script, or a .exe to copy the settings files?

We are trying something similar to copy the QT settings across new and even existing user profiles (harder!), and at the moment using the DuplicateFiles table to copy those 2 files from AllUsers to CurrentUser and an ActiveSetup to run a VBS to copy files to new user profiles at log on.

Worried we may be over-complicating things, but then this ver of QT makes it a requirement! [:@]

Hi Craig,
this are the most important steps, we do:
1. Create a new top level feature, we call it 'UserSettings'. Make 'QuickTimeEssentials' a sub feature of it.
2. Add the components 'com.apple.QuickTime.plist', 'UserSettingsRepair' + '_User'
2. Add 3 files: 'com.apple.QuickTime.plist' + 'QTPlayerSession.xml' + 'QuickTime.qtp' to the file table.
The later 2 belong to the _User component (see the post above).
We install 'QTPlayerSession.xml' + 'QuickTime.qtp' to a new directory called '_User' below INSTALLDIR.
3. Create a line in the 'DuplicateFile' table.
Something like this: DupFile1 UserSettingsRepair QTPlayerSession.xml QuickTime
4. We then use a VBS Custom Action to put a second line in there at runtime to copy 'QuickTime.qtp' to its final destination.
This is conditioned by the OS, because it needs to go to:
'\All Users\Application Data\Apple Computer\QuickTime' on pre Vista OS'.
And: '%USERPROFILE%\AppData\LocalLow' on Vista.
5. The 'UserSettingsRepair' component has a Registry key.
We create a new 'UserSettingsInstalled' key at: SOFTWARE\Apple Computer, Inc.\QuickTime and set it to '1'.
6. We create an Active Setup entry with this line:
msiexec /i [ProductCode] REINSTALL=UserSettings REINSTALLMODE=up /qn
7. With this steps, the package could just self heal in each profile.
We use AS, because we also have the (conditioned) possibility to put a shortcut to each users quick launch toolbar.
Such shortcuts can't be advertised and therefore provide no entry point for self healing.
With this in mind, AS is the only way for us to make sure the settings are there, when the user starts QT player for the first time.

As you probably know (just correcting for others), the location for the qtp file for each user pre-Vista is as 'tmountjr' says above:
\<Current User>\Local Settings\Application Data\Apple Computer\QuickTime\
not as you noted:
'\All Users\Application Data\Apple Computer\QuickTime' on pre Vista OS'.
Maybe others can confirm but I think this is a change from the location of the qtp settings file from previous vers (e.g. 7.1.5)?

Hi Craig,
yes the additional feature uses John's technique.
With the Acitve Setup thing, i not even have a repair.
It does a reinstall of just this top featue, which contains only the things, which go to the profile.
Sorry about the path: Apple changed this in Version 7.2. But its good change.
This package is getting better, slowly, but they are making some progress :-)
Hope this clarifies it.
Regards, Nick

Thanks Nick,
got it working except for the 'Quicktime.qtp' file, which on REININSTALL=Usersettings for a new user, wont copy that one file to the path:
'...\<Current User>\Local Settings\Application Data\Apple Computer\QuickTime\'
I've set up the SystemFolderProperty 'LocalAppDataFolder' in the Dir Table and in the MSIlog it resolves that correctly for the current user, BUT when it resolves its subdirs in the Dir Table: 'Apple Computer' and 'Quicktime', it changes the paths, replacing <Current User> with <TheOriginalInstallerUser>! And because the CurrentUser doesnt have access to the OrigUser profile it fails to copy.

Im lost as to why. Tried using standard components to install these files, also DuplicateFiles after installing to _User as per your method, same result in any case. Funny that the .xml works fine and copies to AppData, but the .qtp gets stuck copying to LocalAppData!? Just tried another file and the same result , so its LocalAppData that is the prob somehow.

Im v close to just VBscripting it I think (still learnt a lot in this process though!).

Hi Craig,
your allmost there! Everything has its price. :-)
Don't VBS this, because this is a common thing, you will need quite often in the future. Believe me!
(Although, maybe some VBS will be needed later on..)

The problem here is, that 'Local Settings' is not among the automatically resolved User Shellfolders in a MSI.
Therefore you need to construct the hole directory tree for yourself.
Fortunately, Apple did the main part already. The path to the current Users Profile is set with the Custom Action 'Set_CurrentUserFolder'.
It sets the directory property 'CurrentUserFolder' to the actual path.
You can see it being called in 'InstallExecuteSequence' and 'InstallUISequence' between the 'CostInitalize' and the 'CostFinalize' actions.
With this, you can set up the further path, you need like this:
LocalSettings CurrentUserFolder LOCSET~1|Local Settings
LS_AppData LocalSettings APPLIC~1|Application Data
LS_Apple_Comp LS_AppData APPLEC~2|Apple Computer
LS_Apple_Comp_QuickTime LS_Apple_Comp QUICKT~2|QuickTime

And finally, in 'DuplicateFile' you set the 'DestFolder' entry to 'LS_Apple_Comp_QuickTime'

Nick,
I had found and used 'CurrentUserFolder' the other day and then constructed the rest of the tree, and I still had the same problem - but now I see why!
I had still been using names like 'APPLE_QUICKTIME' and 'QUICKTIME' for the Dir IDs (default assignments from previous workings) where you used "LS_Apple_Comp" "LS_Apple_Comp_QuickTime" respectively. My IDs must've been in use elsewhere and so messing up the resolution of the paths? As soon as I changed these to custom IDs like yours and modified the DuplicateTable to suit, it worked!! (so simple when you step back and are shown it [8|] !)

Hi Craig,
glad to see it worked out.
Do you use it only on XP? If yes you're done now.
If you need it for Vista too, you have to be aware, that 'quicktime.qtp' lies in:
'%USERPROFILE%\AppData\LocalLow'
Regards, Nick

Hi Joe,
good question.
You have to consider what this components jobs will be.
To stay with this QT stuff:
'com.apple.QuickTime.plist' puts a file to a folder in the 'All Users' profile (or ProgramData Folder in Vista). --> Directory is the destination of this file.
'UserSettingsRepair' installs a regkey to the users profile and files indirectly via the 'DuplicateFile' table. --> We use a regkey here. Directory can be anything useful.
'_User' installs config files into folder below the INSTALLDIR folder. --> Directory is the destination of this files.

Of course, you have to author some of this directories in the 'directory table'.
Hope, this clarifies it.
Regards, Nick

Anyone successfully added the two settings files to the msi using ORCA? Would you be able to send me the modified MSI or screenshots of the modified tables? It would help me to better understand this process by looking at it.

Here is the receipt to include the 3 config files in the MSI and load the configuration automatically into each profile on the first logon after the installation.
This is part of the documentation we created during our changes.
It also demonstrates the use of some Installer-SDK tools.

We create a new feature for the user settings, which will be installed by self healing or Active Setup into each user profile.
The 3 files for the settings have to placed into different directories on Vista and XP/W2k
Directories for 'com.apple.QuickTime.plist'
Vista: C:\ProgramData\Apple Computer\QuickTime\
XP: C:\Documents and Settings\All Users\Application Data\Apple Computer\<QuickTime\

We don't want this files being loaded from the source-cabinet, if a AS-install or self healing in a profile occurs.
The solution is to use 'DuplicateFile' action for this purpose.
During the main installation process, we install this files into a folder in the programs directory.
The 'DuplicateFile' action is then used to copy this files to their final destination.

add this line to the Directory table for the .qtp/.xml DuplicateFile:
UserSet INSTALLDIR UserSet

change this line in the InstallExecuteSequence and InstallUISequence tables:
Set_CurrentUserFolder %USERPROFILE 907

To generate the configuration files, Quicktime has to be installed straight forward.
After that, start Quicktime and configure the settings you need.
Like: Disable Update, Register the Pro version, Disable the content guide at startup and so on.
This settings will be stored like this:
QTPlayerSession.xml (Basic settings)
com.apple.QuickTime.plist (Username/Serial#)
QuickTime.qtp (Disable Update + generic settings)

harvest this files and copy them to a directory.
make a file called 'config.ddf' in it and copy the following lines into it:
----config.ddf begins here-------
.Set CabinetName1=config.cab
.Set DiskDirectoryTemplate=.
.Set CompressionType=MSZIP
.Set Compress=ON
.Set Cabinet=ON
com.apple.QuickTime.plist com.apple.QuickTime.plist
QTPlayerSession.xml QTPlayerSession.xml
QuickTime.qtp QuickTime.qtp
----config.ddf ends here-------

now generate the 'config.cab':
makecab /f config.ddf

If we want to embedd this CAB into the MSI with a MST, we need to store it in a table.
We use the 'Binaray' table for this because it already exists. Embedd the file with this command:
cscript WiStream.vbs QuickTime.msi config.cab Binary.config.cab

This new files are unversioned. Therefore we need to generate entries in the 'MsiFileHash' table for this files.
See: http://blogs.msdn.com/astebner/archive/2005/08/30/458295.aspx
Make a copy of the 'Quicktime.msi' file and name it '1.msi'.
Load 1.msi into ORCA and sort the file table after the sequence.
Delete all lines, but new last tree.
Save it.
Make sure 1.msi and the 3 config files are present in the working directory.
Update 1.msi with this command:
cscript WiFilVer.vbs 1.msi /U /H
Now, 1.msi should contain update Filesizes and Hashes.
Copy them over to 'Quicktime.msi'

Note: All the scripts and ORCA are part of the Installer SDK. Makecab is part of XP and Vista.
If you copy this post to Notepad, search for ' ' (4 spaces) and replace them with a tab.
Then you should be able to paste the lines into ORCA with Ctrl-Shift-V

This has been a big help but I don't quite have it working yet. When running validation Orca complains about the _User component and I don't understand why the key path is QTPlayerSession.xml. Why would we not also reference Quicktime.qtp? Is that because the install already creates the folders for the location of the Quicktime.qtp file?

I'm not sure what's wrong at this point but the folders never get created for the location of where the QTPlayerSession.xml file should go during install.

I don't wish to put the three files in a cab file since I have an admistrative install point. Is there any changes I need to make to the msi? I have the two files located in the install point under Program Files\QuickTime\UserSet. That is the location where the wifilver.vbs script was looking for the files.

Hi Joe,
did you copy the lines from my post above?
If yes, check the GUID from 'UserSettingsRepairVista' component. It was accidently a duplicate of the 'UserSettingsRepair' GUID.
It is corrected now.
To your first question: I use only one component ( _User) for the installation of 'QTPlayerSession.xml' + 'Quicktime.qtp' to its base location. Therefore, only one of them can be the key file for the component. You can change it to 'Quicktime.qtp', but this doesn't make a difference at all.
What is the error you get for the '_User' component on validation?
Using an admin installation should work. The folder seems ok to me.
Regards, Nick

I copied the lines above. I left out the Vista stuff since we don't have Vista and we are not using the pro version of QT so I left out the entries for the .plist file. I went through the whole process 3 times to try and be sure I wasn't making an error.

The error I receive is Component:'_User' does not belong to any feature.

Setting aside the two files I'm trying to add, I'm not even to the point where the installation complains about not being able to find the two files. It's as if all the modifications are being ignored?

Almost finished. When a new user logs in it appears active setup does its thing and deploys the two files but the quicktime.qtp file gets deployed to C:\Current User\Local Settings\Application Data\Apple Computer\Quicktime

Logging the reinstall I noticed that the CurrentUserFolder property is being set to C:\Current User instead of C:\Documents and Settings\

Following through the process I checked the condition for Set_CurrentUserFolder in the InstallExecuteSequence table and noticed it's set to NOT Installed and %USERPROFILE I changed it to just %USERPROFILE This seems to work but I hope I haven't broken anything while fixing it.

One more question, this method uses active setup to accomplish this task right? Is this easier than using an advertised shortcut to do the same thing?

Hi Joe,
but you got a new insight into MSI, didn't you ;-)
The 'CurrentUserFolder' thing was my fault. Was missing from my receipt (corrected it now).
But do it on the 'InstallUISequence' also.

To your question about AS:
Yes this method uses AS, but it works also with Self Healing.
You can test this, if you remove the 3 AS lines from the registry table.
Use the Quicktime shortcut in the Menu to test it. This one is already advertised by default.
I use AS on my method, because i give our administrators the possiblity to install a QuickLaunch and/or Desktop shortcut.
At least the QL SC can't be advertised and if the user starts the app with it for the first time, all the efforts to give the users our default preference are useless.
Regards, Nick

One more question; how can I force setup to overwrite either of the files if they already exist? For instance during an upgrade the files may already exist in multiple profiles and I want to ensure that the new files overwrite the existing ones. Would this be something with versioning?

Hi Joe,
actually, you have to nothing more.
But it's a very interesting question.
The 'DuplicateFiles' action which copies this files over to the profile seems to lack any version checking at all.
So, it will always overwrite any existing file.
That behavior limits its use quite a bit.
Maybe some other folks know more about this.
Regards, Nick

As Nick mentioned, files installed by the DuplicateFiles action will always overwrite existing files.
The duplicate file will be installed if the original file (the file it duplicates) is installed, so the file versioning rules lies in the original file instead.

If you don't use the DuplicateFile table for a certain file located in the user's profile but rely on the self-healing you could first remove the existing file by adding the file to the RemoveFile table in which the file will first be deleted and then installed by the InstallFiles action.

Hi folks,
my previous post was inaccurate as hell :-(.
Did some more testing.
It looks like 'DuplicateFiles' does all the version testing, except that no Hash can be provided to unversioned files.
That means: All the rules mentioned here:http://blogs.msdn.com/astebner/archive/2005/08/30/458295.aspx
apply. That means, if the existing files has newer date than the one we try to install, the existing file is kept.
Joe, that means to your question: To make it bulletproof, you have to go the route AngelD suggested.
Kim, thanks for the suggestion with the remove table. Nice idea.
Hope this clarifies it a bit.
Regards, Nick

Have a look at the description for the the InstallMode column in the RemoveFile table http://msdn2.microsoft.com/en-us/library/aa371201.aspx
As it seems that you have understood this table I guess you easy can figure out the meaning of the Component_ column using the description info.

I have a question related to Quicktime Pro licensing. We have already repackaged and distributed the free version of Quicktime 7.2 to our computer labs at my university. Now one of the labs has purchased licenses for PRO and wants the serial number applied on all the computers in his lab.
I have been trying to locate where on the machine the license key is stored but I have had no luck finding it. It doesn't seem to be anyplace inthe registry or in a file that I can find. I've even installed QT, ran Repack, launched QT and entered the license key, ran Repack again and examined the output and it did not pick up any license key. Can anyone share their insights?
Thanks

I guess I'm not understanding the removefile table as well as I thought. The files I've requested to be removed do not get overwritten even though the ones I want copy over are newer than the existing ones on the test PC.

Hi folks,
in this thread: http://itninja.com/question/migrate-2000-professional-workstation-snmp061
John McFadyen brought up an very important and interesting aspect of this self healing user profile stuff.
The so far proposed way for doing this, has a flaw when we have to self heal a file from the "<UserProfile>\Local Settings\" directory and are using roaming profiles.
Because the "Local Settings" branch of the profile is not going to the server, it won't be available, when a certain user logs in for the first time on a new machine.
It's just not part of the profile which is downloaded from the roaming profiles share. And the package is not going to sense this, because the component key is a
registry key in the users profile. And this regkey is certainly being roamed because it is stored in the ntuser.dat hive file. This means the component key is being roamed and no self heal will be triggered on the new machine.
John suggested, to use a script to work around this.
There is maybe an easier, more elegant way to overcome this:

What about using a registry hive for storing the components key, that is also not being roamed?

Yes, there is actually a quite seldom mentioned registry hive, called 'UsrClass.dat', which is stored in: "<UserProfile>\Local Settings\Application Data\Microsoft\Windows\" which is not part of the roaming profile. This hive is mounted to: "HKEY_CURRENT_USER\Software\Classes". This branch is merged
with "HKEY_LOCAL_MACHINE\SOFTWARE\Classes" and togheter, they make up the virtual "HKEY_CLASSES_ROOT" tree in the registry.
The idea is to create a separate component for the file(s), that have to go to the "<UserProfile>\Local Settings\" directory. And then we create a registry key as the
components key in "HKEY_CURRENT_USER\Software\Classes\Software\<AppName>".
With this, the components key will not being roamed and therefore will not be available, when a certain user logs on to machine, he was never before.
This will trigger the self healing of the package and the 'DuplicateFiles' action will copy the file(s) to its destination.
All this should work in Vista too, as this part of the system hasn't changed much.
Tested this behavior in the las few days and it seems to work. However, i would like you folks to review this and come up with things and aspects, which i may have overlooked.
Regards, Nick

Very interesting thought!
I havn't tested your approach but in theory that should work as you expect.

Roaming profiles are most used in TS (terminal server) environment and for mobile users (laptop) as they may be out of office quite often. Have in mind that though "HKCU\Software\Classes" is not roamed by default it can be set to roam..

(In a TS environment users are not allowed to trigger msiexec for any actions such as a repair.)

One side note:
Why it is not recommended to use a file as keypath under user profile is due to failing to find broken components for admin-users as they have access to other user's (local) profile directory. So when windows installer is checking for broken components it will find an existing keypath under another user's profile instead if any and therefore not repair. Yet as this doesn't apply for normal users you could still set a file under user profile as keypath meaning, a repair will occur for any non-admin user.

This works great! Thanks for your help on this. I'll be able to put this to use with other applications. One last question. Is there any offered classes that deal with learning about MSIs? I know Novell and some other groups offer classes on repackaging software but I'd like something a little more specific in dealing with MSIs.

I'm in Oregon, USA. My employer has never let me attend training outside of Oregon and I'm pretty sure that Australia is out of the question but it's nice to know that someone is actually offering MSI training.

Argh. I'm dealing with this issue right now and I really wish Apple would have given me a nice easy registry key to add to force QuickTime to look in one location for all users. Instead it's hoop-jumping time! But thanks, everyone, for making it as painless as possible.

I've been banging on this package for days. This guild has definitely helped bit I can't seem to get rid of the File Associations window notification on first launch. I have made sure to configure QuickTime prior to copying and using the config files as per this awesome guide. Does anyone know how to disable the file association prompt. Thanks.

Hi blueboy,
load the MSI into ORCA and naviagate to the 'ControlEvent' table.
The dialog is called by the line:
SetupCompleteSuccess ConfigureTypesBtn DoAction Launch_QuickTimeCpl 1 1
You can simply delete it, if you never need it.
Or a better way: set a condition with a public property or the 'UILevel' property.
See: http://msdn2.microsoft.com/en-us/library/aa372096.aspx
Hope, this solves this.
Regards, Nick

I am a complete noob at the msi thing and have just enjoyed the heck outta playing with orca and the sdk on the apple install. I everything went smoothly untill the last step regarding the binary hash. It will create the hash and correct the filesize on the com.apple... file but not the other two. I can't seem to figure out why. Any enlightenment would be helpful I have spent just under 8 hours on this (not just moding the msi but reading the background info).

Hi Richard,
have you exactly done this?
Make a copy of the 'Quicktime.msi' file and name it '1.msi'.
Load 1.msi into ORCA and sort the file table after the sequence.
Delete all lines, but the new last 3 (that means: the file table contains only the lines: 'com.apple.QuickTime.plist', 'QTPlayerSession.xml' + 'QuickTime.qtp').
Save it.
Make sure 1.msi and the 3 config files are present in the working directory.
Update 1.msi with this command:
cscript WiFilVer.vbs 1.msi /U /H
Now, 1.msi should contain update Filesizes and Hashes.
Copy them over to 'Quicktime.msi'

Hi Alf,
it's ok, if this is working for you like this.
But this thread is mainly about, how to include the preference files with the MSI.
And this i a little bit more complex then just calling a few properties on the command line...

Here is a link to ORCA 3.1: http://astebner.sts.winisp.net/Tools/Orca.zip

That is exactly what I did. I am going to start from scratch today to see if it was a process error on my part. And to alfm the reasoning behind all my efforts has to do with compatibilty with firefox. During our test deploy on our test network we experenced an illegal operation crash when loding a quicktime vid. During research it was found that un-checking the directdraw boxes in the advanced tab (under the directx heading) cured the problem. We really don't need tons of support calls on this so I am trying to cure the problem in deploy rather than with support calls.

I'll let you know how it goes....

BTW, I like alfm's idea too... I have always hated the Q on the desktop thing.... I didn't relize that there was a switch for it...

Has anyone followed up on Nick's suggestion about using a locally stored registry hive for storing the components key? We have roaming profiles on our network (not my idea) and I'd like to avoid having Quicktime go through the self heal process everytime a new user logs onto a PC with Quicktime.

If you have followed up on this, can you provide "cookbook" instructions for Nick's great post on 9/11/07? I would really love to see this.

I am not sure what you mean by "cookbook" but I started with no experence with msi files at all and his instructions are very step by step and I had no trouble following them (thanx again nick). As for the roaming profiles thing, we use roaming here (and I like them) and the initial setup is no worse then the IE "configuring preferences" thing that pops up with a new user. It lasts about 10 sec. (max) and it should not worry you. We have deployed the msi with the special settings for Firefox to our customers. The only thing that I ran into that was not in the guide was the chineese language thing (it would not initially deploy).

I gotta do one for 7.3 too.... I didn't know it came out... But for firefox compatibility un check the 3 direct draw boxes under "DirectX" in Edit>Preferences>Quicktime Preferences...>Advanced tab. The settings will be saved when you pull the three settings files. Those DirectDraw boxes crashed firefox on most of my dev lab computers. I don't know why and searches on the internet did not give any reasons execpt "just do it". It seems to work ok with out the boxes checked.

Ok, I ran into an error on the last step and i am not sure what it means "CostInitialize failed, returned 3" after running the " cscript WiFilVer.vbs 1.msi /U /H" line... I am going to go back over everything and double check it but any clue might be useful... This is on the 7.3 msi btw, and i am using the exact same instructions as before...

I didn't have the time to dig into this fully, but it looks like they changed the command in their launch conditions that look for newer installations. In 7.2, the condition is called NOT QTINFO.BNEWERQTISINSTALLED. In 7.3, it's NOT BNEWERPRODUCTISINSTALLED. Looks like the older one was using a function of qtinfo.exe. On a whim, when I generated my transform I just renamed the Launch Condition to the one used in 7.2 and it worked like a charm. I'm still very new to this, so I don't know if I'm creating more problems than I'm solving, but so far it's working fine.

Hi Richard,
this looks kind of weird to me.
The showstopper is this line: 'NOT BNEWERPRODUCTISINSTALLED' in the 'LaunchCondition' table.
The property is set by the CA 'PreventDowngrade'. But it must be triggered by something.
Does this occur on a clean machine too with just QT 7.2.0.240 installed?
If nothing helps, you could try to remove this condition.
Regards, Nick

I have been trolling this thread for the past few days as I have been trying to get Quicktime 7.3 packaged. I have managed to get everything working except for two little annoyances. I have so far been unable to prevent the pop-up message warning that some of the file types assocated with quicktime are currently associated with other applications. Blueboy posted something about this a while back and I tried nheims suggestion to delete the " SetupCompleteSuccess ConfigureTypesBtn DoAction Launch_QuickTimeCpl 1 1" line under the ControlEvent table but that didn't seem to do the trick for me.

I also tried the suggestion from this thread: http://itninja.com/question/quicktime-7.0.2---file-extension-problemsORIGINAL: meastaugh1

When you try and add some entries to the Registry table they don't actually get written. After a couple of hours trying to figure it out, I found that one of QT's CustomActions (QTPluginInstaller_QTInstallProc) clears out the registry. I assume this is to remove registry entries created by previous versions of Quicktime. Re-ordering this CustomAction in the InstallExecuteSequence table allows registry entries entered in the Registry table to be created. I sequenced it at 4990, so it's before WriteRegistryValues.

7.3 didn't seem to have the custom action so just to test I set "QuickTimePostInstallMSIProc_immediate" to 4990 and "QuickTimePostInstallMSIProc_deferred" to 4991 either way it didn't seem to make a difference.

I also noticed that under Quicktime Preferences when you go to the MIME settings under the browser tab the box "Notify me if other applications modify these association" is still checked even though I had unchecked it during the initial install.

Any ideas?

Here is a quick bit on info of what I have done so far. (Disclaimer: I am new to packaging so some of my terminology might be wrong.)

Installed Quicktime and selected all preferences.

Copied the .qtp file

Created a Transform for Quicktime.msi

Created a custom component called QicktimePrefs.qtp

Added the .qtp file to the component with directory path set to Windows\Profiles\Local Settings\Application Data\Apple Computer\QuickTime

Hi Aron,
this is, most likely, done by the very last sequence in the 'InstallExecuteSequence'.
Set it to a condition, which is never true.
Installing it silently with the "/qn" switch should also do the trick.
Regards, Nick

nheim, I tried your suggestion but still no luck. I noticed that the QT Task bar launched after I made that change so I reverted it back to the original settings and the QT Task bar no longer launched but either way I still get the File association prompt. I am going to dig back in and see what else I can find. I appreciate all your help.

now to my question, where can i download orca without all the clutter ...
alternatively a link to a download and a "strip" instruction would also be good

I am replying in response to alfm. When I try to modify those properties that he mentions I don't even see the 2 properties that I highlighted in red. Can someone please enlighten me. Do I have to add those properties?

As a test, after active setup installs the quicktime.qtp file in the current user profile and before I launch quicktime for the first time, I copy the exact same .qtp file over the top of the one active setup installs. I notice that even though they are supposed to be the same file the one active setup copies over is 11.3k and the original is 10.9k. I then launch Quicktime and everything works as I would like it to. I am not sure what is changing the .qtp file before it is copied over to the current user profile but it sure is annoying. :) As an alternative test I removed the file from the custom component I had made and instead I created a custom action that would execute a wyse script I created to copy the file over right before the install finalized is run. This stopped the file association pop up but when I go into quicktime preferences under the MIME settings it still has the option checked to prompt when associated with other apps, but all my other preferences are still set correctly. Is there some registry key that I am missing that would cause this? I am tearing what little hair I have left out of my head. ;)

Hi Aron,
indirectly, you are saying, that your qtp-file is being modified by the 'DuplicateFile' action of Windows Installer during deployment.
Never say never, but this seems a very long shot to me...
Please check everything on a clean system.
Be aware of the overwriting rules, which have been discussed earlier in this thread.
For the registry part: Have you tried to monitor the changes with a tool like ARM (active registry monitor)?

I am struggling with the file association popup that comes the first time users launch QuickTime 7.2. I was looking for a regkey to push to the workstation to quiet the prompt so the user does not see it. I have looked through this thread a few times and I'm not seeing the answer to that.

I have been doing all my testing on a clean VMWare snapshot and rollback between each test. I did see your post about ARM earlier and I did try it out but didn't spend much time with it. I should have some time later today to do some tests and let you know what I find out.

I was able to find the *.QTP file and that seems to hold the settings for the prompt. I copied that file out and then have set my push to copy that file into a new install. That seems to quell the prompt. However I had it working yesterday but today I re-imaged my test box and pushed my install to the system that includes the files I copied off from yesterday were to the proper locations but when I opened QuickTime the stupid prompt was there. I then re-saved the XML and the QTP files out. Re-imaged my test system, re-pushed the install and it worked then. I am pushing the files to the "%USERPROFILE%\Application Data" or %USERPROFILE%\Local settings\Application Data folders. I saw a referense to the all user's folder. Would that make more sense to push it to the alluser's folder, or what is your thought on a date issue?

Okay, I finally have success! My problems I had yesterday were completely user error. My custom action that launches right before "Installfinalize" was pointing to my old wyse exe with the wrong qtp file inside. Once I updated the name in the MSI Script and recompiled everything worked as it should. Just in case someone else is having the same problem here is a very breif overview of what I did to get it work. I might have missed a couple steps here but hopefully this is enough to get people pointed in the right direction.

DISCLAIMER: This is just a process that worked for me and may or may not be the best way for others. I claim no responsibility if the process below does not work or breaks something. Some of these steps may be redundant and not needed.

Installed Quicktime and selected all preferences.

Copied the .qtp file

Created a Transform for Quicktime.msi

Created a custom component called QicktimePrefs.qtp (name can be different)

Add the HKLM Active X keys AlwaysReclaimAssociations set to 2 and QTTaskRunFlags set to 0

Set Desktop Shortcuts property to 0 and Schedule_Asuw to 0

Under the InstallExecuteSequence table I did the following: Set the condition for Action "Launch_QTTask" to 0, set the sequence number for "QuickTimePostInstallMSIProc_immediate" to 4490, and set the sequence number for "QuickTimePostInstallMSIProc_deferred" to 4491

Under the Property table I changed the value for "QT_TRAY_ICON" to #0, changed the value for "SCHEDULE_ASUW" to 0, and changed the value for "DESKTOP_SHORTCUTS" to 0.

I then created an executable in wisescript to copy the .qtp file to the current user profile. Example below
item: Get Registry Key Value
Variable=APP_DATA
Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Value Name=Local AppData
Flags=00000010
end
item: Set Variable
Variable=QUICKTIME
Value=%APP_DATA%\Apple Computer\QuickTime
end
item: Remark
end
item: Install File
Source=.\QuickTime.qtp
Destination=%QUICKTIME%\QuickTime.qtp
Flags=0000000000100010
end

Updated the transform MSI Script under the Execute Deferred tab to add the following before the "Installfinalize" action:
If NOT Installed OR REINSTALL then
Execute Program From Installation [QuickTime_Prefs] ~ name of wise executable you created
End

Hi Ed,
that depends on some parameters:
First of all: You find the correct paths in the first then posts of this thread.
Second: It depends, where you are deploying to XP or Vista.
Third: Apple has changed the path in Version 7.2. Earlier Versions are different.
Print out this thread and save it, you should find almost everything you need in it.
Regards, Nick

I work for a school district and have a pretty unique environment to package for. The biggest challenge is that our students use mandatory roaming profiles, while all of our staff use standard roaming profiles. With over 400 different applications deployed in various combinations to 5000 client machines, I often need to come up with especially creative solutions. Almost every time a new version of QuickTime comes out, I have to rethink our deployment method because Apple often makes so many drastic changes to their distribution. With 7.3, their decision to move the default location of the .qtp to the local settings folder has proven to be a big headache here. For us, since so few users have a need to modify the .qtp once it's been set up properly for our environment, in the end it made the most sense to redirect the location of the .qtp back to all users. There's a HKCU key that allows this: HKEY_CURRENT_USER\Software\Apple Computer, Inc.\QuickTime\LocalUserPreferences\. I set the FolderPath value to C:\Documents and Settings\All Users\Application Data\Apple Computer\QuickTime\ and copy the modified .qtp to that location. Admittedly it's not the most elegant solution and probably won't be the preferred method for most of you, but it works for all my user types and gets this app off my plate for now.Cheers-Mike

Hi Aron,
that's ok. Just be aware, that 'QTPlayerSession.xml' still needs to go to the profile, if you want to deploy it.
That depends on how important you consider the 20 + options in that file.
As i mentioned earlier, i consider the transfer of the preference file to the profile as an important step in the right direction.
If they would transfer this stuff into an XML file or to the registry, that would make things even better.
But the info Mike gave, can be very important for certain scenarios and to maintain backward compatibility
Regards, Nick

Thanks for sharing your knowledg of QucikTime, I am having trouble getting quicktime to push with the deafault file types intact. I have gotten the File Association prompt to stop comming up but I can't figure out how to keep the File associations to stay intact for the user. I'm using Mikes suggestion, and that was to change the Local User preference in the registry. My push then copies the *.QTP file to C:\Documents and Settings\All Users\Application Data\Apple Computer\QuickTime\ I also am copying the XMl file to Documents and Settings\%userprofile%\Application Data\Apple Computer\QuickTime.

Is there something I'm missing?

Thanks in advance for any help or suggestions you might be able to provide.

Hi Ed,
i think, i was wrong with that statement.
However, the best thing you can do, is to log that stuff and see which are the differences in both deployments.
As soon as i get to it, i will investigate this deeper. But this may take a while...
Regards, Nick

Hi Nick,
I think I'm really close to having QuickTime packaged and ready to push. I am new to the world of Package development as you may be able to tell. Anyway I have Wise Package Studio and Zenworks as a delivery method. I have everything working in my package except the File Associations part. I read through the board a few time and I think my answer may lie in your post where you say this is most likely, done by the very last Sequence in the "InstallExecuteSequence". Set it to a condition, which is never true. I have the MSI pushing in a ZenWorks NAL object and it is silent. I have pushed it several time to different restricted test user's on my test box. It seems as though when I push it to the test user I used to create the known good QTP and XML files it seems to work fine. But If I install it for a different user the File Associations is empty, nothing is set. I opened the MSI with Orca and found the 'InstallExecuteSequesnce' Table but the is where I get lost. I'm hoping you might be able to elaborate on that part a bit more for me.

Did you see my post above with the process I used? I was having the exact same issue and using that process I was able to get it working. One thing I forgot to include is the QT_Task gets put into the Runonce in the registry causing the taskbar icon to pop up. I removed this as well and so far so good.

If you are referring to Post 30 with 13 steps. I'm not that advanced yet. All I'm doing it pushing apple's MSI unchanged and then scripting the changes to the registry and copying the files over. It seems to work for the user that I used to capture the xml and qtp file but if I push it to a different user then I see there are now files assoc set.

So at this point I'm wondering what the exact steps might be to successfully bring over the files assoc.

Sorry for my lack of knowledg, and do apprecciate any help you might be able to offer.

I'm a little closer to havign this figured out. Our user's have restricted access to the workstation. The file association is blank if the user is restricted but If I grant them local Admin rights they have file preferences. If I then remove them from the local admin group their file assiciations are gone. So it's a rights issue at this point but I'm, not sure to what?

QT needs to write to reg keys in order to 'steal' file association from it's rivals...
The following is not exhaustive and is not a definitive answer to your issue...
Use Regmon to look for AccDenied in HKClasses root...

Hi folks,
i think this shouldn't be a problem at all!
First of all: We deploy QT for more than 3 years now to locked down machines and never hat issues with assocs.
Standard users can override all associations in their profile.
the HKCR branch is a merge from 'HKLM\SOFTWARE\Classes' and 'HKCU\SOFTWARE\Classes'.
Regards, Nick

First, I want to thank Nick (nheim) and all the others who have posted on this thread. After weeks of intermittent work, I finally have a more or less working install that is pushed via AD and includes a transform. Largely, I followed the directions in #20.

The one issue I have been unable to resolve involves MIME file types, which appeared to be controlled by the quicktime.qtp settings file. No matter what I do I have been unable to "turn off" the check box that tell QT 7.3 to notify the user if other programs attempt to change MIME settings (ie checkbox that says "notify me if other applications modify these settings"). For a standard user (ie not an administrator of the PC) if I uncheck the box, press APPLY to save the change then close the settings, when I reopen the settings window the box is checked off again. By monitoring the time stamp, I can see that quicktime.qtp is updated as soon as I reopen the application. I tried monitoring the registry and could not find a key that was responsible. Several times I tried updating the MSI and transform using the steps posted by Nick but could not find a way to get this to work. Repeating that process several time resolved the other issues reported above related to file associations but not this one. (I even was able to resolve the same problem that affected the file association tab in QT settings.)

What I have now works well enough for me but I find that this is one stubborn application to get to work the way I want.

Hi folks,
finally got the time to down track the annoying error, that the 'Quicktime.qtp' file is somehow being changed after it is copied to the profile.
The problem is the 'QuickTimePostInstallMSIProc_deferred' Custom Action in the 'InstallExecuteSequence'.
This CA writes a default 'Quicktime.qtp' file or if it is already there, it writes some default value to it.
This explains, why several people (including myself) experienced a partly change of their well crafted 'Quicktime.qtp' settings file.
To overcome this, one could simply delete this CA. But this is no real option, because it writes the file associations to the registry.
An other possibility would be, to copy the file with the DuplicateFile action and then set the 'Read Only' Bit.
A further one could use a own CA and copy this file as the very last action before 'InstallFinalize' and overwrite the existing file.
Hope this enlighten the things a bit and creates some ideas...
A lot easier approach would of course be, if Apple would provide the deployment people with this things implemented as admin options!
Regards, Nick

Apple screwed up again... There are major security holes in QT 7.3 (go figure...). So Apple released 7.3.1.. Great we all know how to do this! Following all the previous steps on the MSI for 7.3.1 I ran into an error:

I checked the log and saw the error but I didn't see exactly which one failed. I may be missing something... Link... http://www.darkstarmediallc.com/log1.zip
MSI - http://www.darkstarmediallc.com/quicktime.zip - extract from archive
Have a look...
Richard

The error occur while the InstallValidate action is executed.
I took a quick look in the MSI and there are two components referring to the QuickTime directory (Component table, Directory_ column).
So as the error message apply: Error 2727: The directory entry 'QuickTime' does not exist in the Directory table, the Directory table lacks the QuickTime directory entry.

Oh and a quick ICE03 validation would have given you these two errors:
ICE03 ERROR Not a valid foreign key; Table: Component, Column: Directory_, Key(s): UserSettingsRepair
ICE03 ERROR Not a valid foreign key; Table: Component, Column: Directory_, Key(s): UserSettingsRepairVista

As both the UserSettingsRepair and UserSettingsRepairVista components only contain registry entries and the keypath is set for these registry entries (RegUser1 / RegUser1Vista); also the msidbComponentAttributesRegistryKeyPath attribute bit is set for these components you should be able to just change the Directory_ column in the Component table for these components to TARGETDIR.

I have been struggling with QuickTime 7.3.1 the last days, and have tried to follow the advices given in this thread, especially the recipe by FritzsCorner in post #79, without success. (I am not sure if FritzsCorner was packaging version 7.2 or 7.3 in that post.)

The way which now seem to work for me (although not done with the testing yet), is principally the same, but I have moved the WiseScript that copies the settings files (QuickTime.qtp and QTPlayerSession.xml) out of the MSI package. That is - I run the standalone WiseScript .EXE after installation of the MSI, and also have the Active Setup StubPath pointing to this .EXE. It seems to give the desired result, and I don't risk that the MSI tries to patch the .qtp file with default values, like we have experienced.

Right now I don't see any drawbacks with doing it this way, but perhaps some will show up, or other people here can think of some... Anyway I think this is simpler to implement than making a lot of changes to the MSI via an MST transform (I also specify the variables like DESKTOP_SHORTCUTS=0 on the msiexec command line).

I know this thread is a little old however post #19 nheim wrote still works for Quicktime v7.62.14.0. However I think this can be improved slightly (it seems to work for me)

Instead of Nesting the QuickTimeEssentials component under the new UserSettings component it would be better to have them as siblings under the root. Without changing this when the Activesetup is run the QuickTimeEssentials component is also invoked. With REINSTALLMODE=up setting I dont think it does anything else other than take longer to process. If QuickTimeEssentials isnt nested under UserSettings then when the Active setup runs with this setting REINSTALL=UserSettings it wont be reinstalling QuickTimeEssential, just UserSettings which of course copies the duplicate files.

I have followed Mr H's advice on this post and whilst QuickTime recognises the QuickTime.qtp file in the all users folder, I cannot get mov files to open as default with QuickTime. Also QuickTime does not show up on the Open With List. When I go into Edit-Preferences the property is set to .mov only. Ive noticed the checked option for video has a slight grey tinge tho it is still ticked.
Any Ideas?

Hi All,
Please help in sorting out the problem with Apple Quick Time Installer.
while installing manually there appears two dialogue boxes(Install Desktop Shortcut and Automatically Update ) which i have to un check and then go for installation.
The problem is, soon after installation of msi the properties ChkOptInstShortcuts and ChkOptInstASU gets deleted, Even though i use to set these manually in Property table its not working.. i tried all the possible ways like custom action, control event table... but still the issue has not been solved .. it will be help full if some one replies with the solution