View Rory’s article here.
An update to my Sequence Like a Boss presentation from BriForum 2015 Denver.
I attended Tim & Patrick’s session titled “5,4, 3, 2, 1, LIFTOFF! How Processes Become Virtualized” and learned that Acrobat DC is officially supported with App-V! In my session I mentioned that Adobe did not support Acrobat being sequenced in App-V. While that was true when I made my slides, it turns out they started supporting App-V 5 SP3 around a week ago. I do not believe they officially support older versions of Acrobat, but starting with DC is a big step.
Admin Guide/Recipe and more here: App-V Deployment: Acrobat DC
The Admin guide also mentions they have a separate MSI to enable “all” features of Acrobat.
To leverage all of Acrobat’s features, a supplementary App-V MSI must be installed on the user’s machine. The MSI should be available as a part of the downloaded .zip file. It contains Adobe Acrobat’s integration points for various applications such as:
MS Office Integration – Context Menu and In-App Acrobat Ribbons.
Mails Integration – MS Outlook and Lotus Notes will start showing Acrobat Features.
Adobe PDF Printer – Allows the user to print any file to Adobe PDF.
Web Capture – Allows the user to be able to convert a webpage to Adobe PDF inside the Browser.
Registers necessary fonts on the client which will be used by the virtual application.
I haven’t had time to go through the guide, but this is great news in the App-V community. Big thanks to Tim for mentioning that in his presentation.
I have the honor to be presenting at BriForum again this year! On top of that I will be presenting in two sessions:
Sequence Like a Boss – Presented by myself and co-presentor Drew Walz
In a continuation of the popular Sequencing for Success series, learn how to Sequence like a Boss. Just because an application doesn’t work at first pass doesn’t mean it can’t be virtualized. In this session, you will discover how shims and symbolic links can improve application compatibility. Learn how to identify the files and folders that need them. Find out how to use the same tools to troubleshoot application errors once an application has been virtualized.
Can’t Fix Your Application Issue? Try to Break it Instead! – Presented by Drew Walz and me as the co-presentor.
Sometimes knowing how to break a Windows application can be the best way to determine how to fix it. “Break-it” triage can help you quickly identify the general category of what’s causing the problem with an app, and suggest acceptable short term workarounds. Deep-dive application troubleshooting tools and practices are great, but they require time, effort, and focus to use. In a customer outage situation, you’ll typically need to find a fix more rapidly. We’ll cover quick application troubleshooting triage tactics and workflows that will help you zero in on the source of the problem.
Register for BriForum Denver and find other great sessions at http://briforum.com/US/
The BriForum 2014 videos are now publicly available! Catch the presentation that Rory and I did here: http://www.brianmadden.com/blogs/videos/archive/2014/08/05/briforum-2014-boston-rory-monaghan-amp-ryan-will-sequencing-for-success.aspx
Also, I will be presenting at Briforum 2015 twice this year! Be sure to catch my session ‘Sequence like a boss’ and I’ll be co-presenting with Drew Walz in ‘Can’t fix your application issue? Try to break it instead!’
I promised a while back to post some examples of creating and using shims. These are a little later than I wanted them to be, but here we are (finally). Since it took so long I added a bonus that I wasn’t able to include in my BriForum 2014 presentation, a video demonstration of the VIrtualRegistry shim.
My top 2 used shims:
- CorrectFilePaths – These are similar to symbolic links, but are defined per .EXE instead of system wide
- VirtualRegistry – Redirect registry calls. Can redirect HKLM to HKCU.
For a more detailed explanation on these, visit my previous post on shims.
Formatting your parameters:
Example:”C:\Programdata\Application X”;”Z:\ApplicationStore\Application X”
This will redirect the application call from the Programdata location to the Z drive. The Z could be a user mapped drive or any location you would prefer it go to. Keeping in mind that only the EXE(s) that you specify will only be redirected.
If you want to use environment variables such as %appdata%, I found that putting them at the begging of the parameter did not work. So I had to use “c:\users\%username%\appdata\roaming”.
This will redirect the application whenever it calls the above HKLM key to the HKCU specified in the example.
Download the Microsoft Application Compatibility Toolkit (ACT) here
Creating a ConfigurationFile.ini for SQL Standard or Enterprise is easy. The installer automatically creates one for you and gives you the path at the ‘Ready to Install’ step. For some reason this default functionality for Express was removed starting with SQL 2008 R2 and continues to SQL 2012. I haven’t messed with SQL 2014 Express, but one might assume it’s gone there as well.
Anyways, getting the installer to generate a ConfigurationFile.ini is pretty easy. Open a command prompt and add the following parameters to the .exe:
Note that /Action is a required parameter. Also, setting /UImode to Normal will present every dialog box that exists in the installer (even ones that do not apply to Express). Normal is the default value for non-express editions.
A few things to know for your ConfigurationFile.ini
- Add the following to the bottom of your file to agree to the license agreement: IACCEPTSQLSERVERLICENSETERMS=”True”
- If you want to run in Mixed mode and need to specify the SA password, add the following to bottom of the file: SAPWD=”ENTER_YOUR_PASSWORD”
- To perform an unattended or silent install modify QUIET=”False” to “True”
- For a silent install you will need to comment out or remove UIMODE=”Normal” in the file. This cannot be used in a silent install
Update 10/26/16: In the comments, Stephan states that his SQL 2014 install would not accept TRUE/FALSE for the IACCEPTSQLSERVERLICENSETERMS. Try using 1 instead of TRUE if you experience the same error. I recently created a config file for 2014 and was able to use TRUE. FYI in case you do though!
I recently ran into an issue sequencing an application that uses the Crystal Reports runtime 13. The application worked properly when natively installed on a machine, but thew errors when it was virtualized with App-V 5. It complained about a particular GUID and not being able to locate some DLLs.
I found a similar issue on the TechNet forums where an application that used Crystal runtime 13 worked properly in App-V 5.0 RTM, but not with SP2+. It appears Microsoft fixed some issues with buffering in the updated Service Pack. Which in turn ‘broke’ crystal integration with the application. I checked out the installation path for the Crystal runtime and it sure has some long paths!
C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\Crystal Reports 2011\crystalreportviewers
C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86
The OP of that issue was able to resolve it by creating an MST to shorten the file and registry paths. I was curious if I could fix this issue without creating an MST. I couldn’t find any install parameters for the runtime, but found ones for full-blown Crystal. The one I wanted was this:
After confirming the same parameter worked with the runtime installer, I set installdir to – C:\Program Files (x86)\1\
This changed the installation directory to: C:\Program Files (x86)\1\Crystal Reports for .NET Framework 4.0\Common\..
It only saved 18 characters, but it might just do the trick…. And it did! Now the application is able to run reports without error.
The underlying issue here is that installation path is too long when you sequence it. Maybe the next verison of the Crystal runtime will have shorter paths…. If not, we should at least have a work around.
Here’s a bonus! – I hard a hard time locating a download page for the runtime, but I found it here.
As promised in my BriForum 2014 session, I will start a small series on Application fixes using shims and symbolic links. The first installment is on shims:
Shims can be really useful in just about any environment and I wish there were some better resources explaining how to use them. This is why I wrote this article explaining my two favorite shims.
As Microsoft releases new versions of their OS, folder structures and other key areas are bound to change. Or some applications may store personal user settings in a shared location or has a registry key that is best lived in HKCU instead of HKLM. This is where shimming or “Compatibility Fixes” come to the rescue.
A shim is installed at the system level and will essentially intercept an application call and change the default behavior of the application. The two main flavors of shims that I find extremely useful are CorrectFilePaths and VirtualRegistry. There are several hundred types of shims, but these two are the ones I find myself using a lot.
This shim is particularly useful when an application stores a file or folder in a directory that you want stored somewhere else. For example, say you install an application on an RDS server that stores a configuration file in ProgramData. This is not a good location if each user writes settings to it and get overwritten by other users. The CorrectFilePaths shim allows you to redirect the file call from the original path (e.g. C:\ProgramData\ABC Inc\UserConfig.ini) and replace it with a path that is user specific (e.g. %appdata%\ABC Inc\UserConfig.ini).
During shim creation you specify what process will be intercepted and redirected. This way when a user launches the process you specified and calls the file, it will be redirected to the new location. Now every user will have their own configuration file instead that doesn’t conflict with other users.
Much like CorrectFilePaths, the VirtualRegistry shim allows you to redirect a registry call to a different location. An example where this would be useful is when an application stores a database server value in HKLM. This value may tell the application what server to establish a connection to. Now, say you have two groups of users – Group A & Group B. Group A connects to database server 1 and Group B connects to database server 2. Normally you would build a separate RDS server for each group to accommodate the multiple database values, but what if you wanted to have both user groups use the same server? How would you be able to accommodate that?
Create a new VirtualRegistry shim! You can redirect the HKLM values to HKCU and set those values with a logon script. This way Group A gets its registry key for database server 1 and Group B gets theirs for database server 2.
Shims sound great and they really are, but they can be a pain in the rear to get configured. I’ll post an article on both shims with examples in a few days.
If you want to get started Shimming, download the Application Compatibility toolkit from Microsoft here: http://go.microsoft.com/fwlink/p/?linkid=205020
About to deploy Acrobat and find there are a lot of updates to install? Good luck trying to find an updated installer higher than version XX.0. Not only is it a pain to download and run every applicable update, trying to figure out the upgrade path can be like doing super math.
To make your life a little easier when deploying Acrobat, follow these steps:
1 .Determine the upgrade path
There is an Acrobat and Reader release notes page that can help you determine the upgrade path. Click on the version numbers to determine what version is required before that update can be applied. The patching got a little easier in 10.X and 11.X with more cumulative updates, but 9.x is still a PITA. For version 9, I suggest you obtain the upgrade path from here.
2. Download the update(s)
You can download all updates from this page.
3. Modify the Acrobat setup.ini
Next, grab your xx.0 installer and extract it with an archive utility such as WinRAR.
Open setup.ini with notepad and look for the [Product] section. Start a new line here line that begins with “Patch=” and list the MSPs in order from oldest to newest separated by a semi-colon.
Here are some examples of what your Patch line would be at the time of this writing:
4. Copy in your patches
Place all of the MSPs into the root of the installation folder. This is the same folder that contains setup.ini.
Run the Acrobat install and let it run all of the updates for you. The final version to be installed should be displayed in the installation menus. This can help you verify the latest version will be ready when the install is complete.
Use the Adobe customization wizard to generate a custom install. You can insert your license key, change the install directory, set default PDF viewers, disable the EULA, and many other useful settings. You can grab Adobe customization wizard 9 here, X here, and XI here.
Hopefully these steps can keep you from going crazy when deploying Adobe Acrobat (especially version 9).
If you’ve ever tried to push out a silent QuickBooks installation to a computer, you probably know its not supported by Intuit. Nor can you just extract the MSI and add parameters for licensing and install directory. It’s darn near impossible to do without some sort of automation script such as AutoIT Script. I’ve tried using an MSI editor in the past and didn’t get very far because there were some missing properties.
Today I found a post on a fairly new blog called VirtualAppPack. The article has good step-by-step instructions how to create a transform file and adding the missing licensing properties. The only thing I would add to his post is not to expect an installation to complete if you add the ‘/qb’ parameter to your MSIEXEC command. For some reason or another, it doesn’t do a full install of QuickBooks with that command. But if you use ‘/qn’, it will perform a full install.