Monthly Archives: January 2008

Learning To Deploy VTSO 3 AddIns

Edit: Follow-up article VSTO Lessons Learned

I’m writing this open letter to anyone who can help me ramp up faster on learning the best practices for deploying VSTO 3 Add-In’s written in Visual Studio 2008 targeting Office 2007. I’ve done a bunch of googling, asked for help in multiple forums but no one else seems to have gone down this road yet.

I’ll share first what I have learned….. VSTO is basically a big adapter pattern / thunking layer framework to make it super easy to write managed code add-ins for Microsoft Office without all of the hassle of interop. I’m probably summing this up to simplistically but hey, I’m just a Setup Developer not a VSTO Developer.

The developer that I’m working with has created a .VSTO file which is basically a ClickOnce project generated by Visual Studio. We don’t want to use ClickOnce to deploy the AddIn because we really have a bunch of AddIns to deploy along with .NET Framework 3.5, VSTO 3, several other prereqs, various system components, GAC assemblies and other managed applications such as tray apps and system services.

So currently I’m writing an MSI to lay everything down on the machine and then call out to %CommonProgramFiles%Microsoft SharedVSTO9.0VSTOInstaller.exe /Silent /Install [TARGETDIR]Foo.vsto.

The above is technically workng working but I’m really not happy with it. It looks a lot like the ugly devenv /setup CA calls I see Votive use in WiX. I feel caught between a rock and a hard place…. the Windows Installer purists proclaim that EXE CA’s are full of danger to be mitigated ( why it’s not mitigated in the EXE hosting model is a blog for another day ) and yet the VSTO people don’t see to have given me any other choice.

Edit: I’ve noticed that calling VSTOInstaller installs the add-in only for the current user. If I run it as Deferred System Context the interactive user won’t see the add-in. If I run it as Deferred then the user will but other users won’t. This might require me to do some per-user pattern hacks.

Does anyone have any suggestions?

What’s Your Blog Worth

I was a little bored and in need of distraction when I discovered an old interesting site that `calculates` blog worth. Just for fun ( and no serious comparisons intended ) I decided to plop in my own blog and it came back as $6,209.94.

Personally I think my blog is really priceless. 🙂 But heh, who can argue?

So for more fun I plopped in a few of my favorite MSI related blogs:

Heath Stewart $2,822.70
Bob Arson $7,339.02
Aaron Stebner $8,468.10
Rob Mensching$17,500.74

Not too bad, but as important as us little MSI Experts sometimes think we are, let’s look at a blog with a more general audience:

Scott Guthrie: $1,715,072.52

Whew, I’d sell my blog for that much. Of course my comment about self grandeur equally applies to techies in general. Let’s look outside of our circle at a few sights that might be popular with other members of your family:

Rotten.com $2,072,426.34
Post Secret $5,539,266.48
Perez Hilton $5,655,561.72

Hmmm, funny yet little humbling isn’t it? Well, I guess that’s why Howard Stern makes $500 million and the rest of us make somewhere south of that.

Even developers are concerned about the environment…

Recently in the wix-users email list the following question was asked about hybrid installations:

Is it possible to create one MSI for both 32bit and 64 bit OS

Oh wait… You mean it’s not that type of hybrid? Well then, I think I can still help you out.

5 years ago, there were very few people would have even thought about supporting the x64 environment. However, the current processor lineups from the major vendors support both instruction sets natively. The usage of 64-bit operating systems is increasing. Making it more prevalent is the fact that the x64 versions of Windows contain a 32-bit subsystem to support 32-bit applications. This means in most cases, you don’t have to abandon your beloved 32-bit applications.

No one wants to maintain two installation codebases, it would be most convenient if both versions of the binaries could be supported in one installation package. Here is where the problem creeps in. Windows Installer only supports one processor architecture in the Summary Information stream. Of course, I wouldn’t even bother telling you this if there wasn’t a convenient work-around.

Since x64 versions of Windows support 32-bit applications, we can mark the Template Summary property as Intel;1033. While this does instruct Windows Installer to treat this package as a 32-bit package, Windows Installer allows for this package to contain components marked as 64-bit. Since the question comes from the wix-users list, we’ll focus on WiX for this entry, but the same principles can be applied to any Windows Installer project no matter what your tool of choice is.

Consider the following snippet from a WiX product file:
<Directory Id=”TARGETDIR” Name=”SOURCEDIR”>
<Directory Id=”ProgramFilesFolder”
ShortSourceName=”Progra~1″ SourceName=”Program Files”>
<Directory Id=”INSTALLDIR”
Name=”Test”>
<Component
Id=”Common.txt” Guid=”{FC288E49-D459-4EE8-AC1F-375497A6E09B}”>
<File Id=” Common.txt” Name=”Common.txt” KeyPath=”yes” DiskId=”1″ Source=”SourceDirFileCommon.txt”/>
</Component>
<Component
Id=”_32bit.txt” Guid=”{E4D22ADB-9A91-4388-8F5E-391DB1CCB211}”>
<Condition>(VersionNT) AND (NOT VersionNT64)</Condition>
<File Id=”_32bit.txt” Name=”32bit.txt” KeyPath=”yes” DiskId=”1″ Source=”SourceDirFile_32bit.txt”/>
</Component>
</Directory>
</Directory>
<Directory Id=”ProgramFiles64Folder”
ShortSourceName=”PROGRA~1″ SourceName=”Program Files”>
<Directory Id=”INSTALLDIR1″ Name=”Test”>
<Component
Id=”_64bit.txt” Guid=”{8EE8C9CE-2F2A-43B8-B6B6-AD8E01A4109F}” Win64=”yes”>
<Condition>(VersionNT64)</Condition>
<File Id=”_64bit.txt” Name=”64bit.txt” KeyPath=”yes” DiskId=”1″ Source=”SourceDirFile_64bit.txt”/>
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id=”32bit” AllowAdvertise=”system”
Display=”expand” Level=”3″ Title=”32bit”>
<ComponentRef Id=”_32bit.txt”/>
<Condition Level=”0″>VersionNT64</Condition>
</Feature>
<Feature Id=”64bit” AllowAdvertise=”system”
Display=”expand” Level=”3″ Title=”64bit”>
<ComponentRef Id=”_64bit.txt”/>
<Condition Level=”0″>VersionNT
AND NOT VersionNT64</Condition>
</Feature>
<Feature Id=”Common” AllowAdvertise=”system”
Display=”expand” Level=”3″ Title=”Common”>
<ComponentRef Id=”Common.txt”/>
</Feature>

The application is divided in to three features, 32-bit, 64-bit, and a common feature. The common feature contains the bits that will be common to both architectures and of course the other features contain the architecture specific bits. The components are then conditionalized to only install on their supported architectures. The good news is, this is not theory, I have tested this and it works.

There is of course a reason why you would not want to do this. Look at the size of the .NET Framework 3.5 redistributable. It’s HUGE! …and why do you think that is? Correct, it contains the binaries for all of the different processor architectures. Aaron Stebner has discussed this in a pretty recent blog post of his.

So no, it’s not that kind of hybrid, but it should at least help you in your development efforts.

Pay No Attention To The Bugs Behind the Curtain

Recently I expressed my concerns ( Wix: Forced To Use Beta Software ) about the release schedules and methologies employed by WiX 2.0/3.0. As usual my concerns were downplayed with comments like this one from an anonymous user:

You are overreacting.
WiX/Votive 3 is pretty stable and if you test the .msis correctly you won’t run into dark holes.

Unlike your beloved InstallShield which likes to crash from time to time 😉

Wow! I’ve been in this business for a long time and it’s very rare that I hear companies tell their customers `You are overreacting`.

Of course, I’m not overreacting. The last official release of WiX v2 and wiX v3 was May of 2007. That’s nearly 8 months ago and another 12 months to go since Rob said it’s unlikely to be resolve this year. So if you want to use any of the bleeding edge progress you have to comb your way through weekly releases.

Recently I was doing just that when I discovered that in the latest build of WiX that the Votive WiX Projects won’t appear in Visual Studio 2005. Go back a build and they work.

Now I ask you: How many developers who read my blog work for companies where their iteration schedules are measured in years instead of months, drop untested preview builds on their customers, expect their customers to troubleshoot the problems and file their own bug reports, search blogs for release notes and tells them that they are overreacting when they suggest that the status-quo isn’t working?

:Pause:

All you Microsoft employees can put your hands down now. Does anyone else still have their hand up?

Anyways, I know that’s not how we do it where I work.

An Interesting Year Of Change To Come

Although I’m pretty savvy, I’m not really qualified to give financial advise. Still, I can’t help but notice the pendulum swing that’s happening and I advise everyone to seek knowledge and apply it to your own personal situation. It seems that change is in the air again ( as it always is ) and it smells like recession driven merger and consolidation. Just about every industry that I’ve been in is seeing a lot of activity in this area and a few minutes ago I found out that I’ve been `sold` once again. Just four months ago I was working for a privatly held company named Hart InterCivic who sold our Records Management group to a publicly traded company named Manaton who has just now been sold back to a private equity company named Thoma Cressy Bravo. This new company seems to be in the business of consolidating industries. The last company, Austin Information Systems / Overwatch Systems I worked at went through a similar transition ending up as part of Textron Systems. Before that I worked at Continental Airlines which has been part of the merger rumor mill with United Airlines and other suitors for years. Even before that at EDS there was always rumors that our group was going to be sold to CA, CSC or IBM.

Well, heads up and hang on! I hope it’s a good year for all of us.

WiX: Forced to use Beta Software

Aaron Stebner recently posted a blog describing why XNA Game Studio 2.0 switched from WiX 2.0 to WiX 3.0. Interestingly enough he failed to mention that WiX 3.0 is a BETA release.

This reminded me of a WiX-Users list post from Votive Author Justin Rockwood where he says:

Votive 2.0 hasn’t been touched in over a year, so I’m not sure what the issues might be. Also, Votive 2.0 was designed primarily to work with Visual Studio 2003, although I think it also was supposed to work in VS 2005. Maybe with SP1 there were some changes. Actually, I know that’s the case now that I think about it. SP1 moved a bunch of registry keys from HKLM to HKCU, so I bet Votive doesn’t work on SP1. I’d like to say that we’ll fix that, but we probably won’t. J Sorry about that. I recommend one of the following: 1) move to Votive v3, which is more stable and more feature-rich, 2) use Visual Studio 2003 for Votive v2 development, or 3) uninstall SP1 for VS 2005. I know that these options may not be the best for you, for which I apologize, but Votive v2 is really not supported anymore.

Does anyone besides me see a problem with this? Let’s break it down:

Votive 2.0 was designed for VS2003 and might work on VS2005 but not VS2005 SP1.
VS2005 SP1 was released on Dec 15, 2006.
WiX 2.0 was made the production gold release on May 25, 2007. That’s over 5 months to `get it right`.
According to Justin: “Votive v2 is really not supported anymore.”

So that leaves us with WiX 3.0 which is described as beta quality, ever changing, `use at your own risk` release. Personally I don’t think it’s fair to ask setup developer and tools ISV’s ( InstallAware for example ) to have to make this choice.

According to WiX creator Rob Mensching don’t expect this problem to be resolved for another year.

InstallShield .NET 3.5 Unofficial Fix

As recently announced on InstallSite InstallShield has published a .NET 3.5 prereq. Recently I noticed a thread on InstallShield community where user Bruno Walter noticed a potential problem with reboot handling of the prereq.

I’ve not actually had a chance to check this out yet but the defect seems to be confirmed and an unofficial work around provided by InstallShield development.

If you are on the bleeding edge with .NET 3.5 you might want to check the patch out which is available here.

Microsoft.Public.Platformsdk.MSI Is Overrated

In a comment to Aaron Shurts’s recent blog Stefan Krueger left pointing to a support page that mentions:

The MSDN Managed Newsgroup benefit gives you unlimited access to English language managed newsgroups as an MSDN subscriber. Get responses to your questions from the community or Microsoft within two business days.

First off ( even though I’ve never met him in real life ) I highly respect and like Stefan. So my thoughts here are strictly about the newsgroup, not the messenger.

I find it interesting that Microsoft advertises the newsgroup as an MSDN Subscription feature. Then again, Microsoft has recently been in the news for charging for features that it otherwise gives away for free. Sadly, Macrovision is guilty of this as well since they claim that Bronze, Silver and Gold maintenance plans come with “24 x 7 access to product Web Communities”.

Either way my personal opinion of the MSI newsgroup is very low. The volume of traffic is extremely light. When you wade past all of the `MI5 ruined my life` spam posts, there is almost zero traffic.

What’s left is a core group of mostly InstallShield/Wise/InstallAware haters who love to roll their own tools. Ironically a couple of these people have been awarded MSI MVP Awards simply because of their participation in this one small forum and/or for rolling their own tools. ( But that’s a topic for another day. )

The core group of this newsgroup typically `helps` people who are having problems writing MSI packages using the SDK tools, home grown tools and VDPROJ. From my observations, the same old problems crop up year after year. Problems that wouldn’t be happening if better tools were selected.

For example, one recent particularly funny thread was when Microsoft Windows Installer MVP Dennis Bareis was having difficulty understanding registry appending and registry types. I’ve been using InstallShield for years and their graphical designers make this question a non issue as the tool guides you through authoring your registry table entries. If you want to know what it actually looks like, you can see it in the direct editor. I suppose everything has to be harder when you are rolling your own and trying to prove that you know more about MSI then InstallShield.

Well, I’m sure with this post I haven’t made any more friends at Microsoft. Sorry, but this is how I feel on the subject and I’m more interested in telling it the way it is and trying to improve things then paying homage and maintaining the status quo.

How Gracious of Them

The Windows Installer team has seen it in their heart of hearts to provide some information on where to receive professional support for Windows Installer.

Yes, I am being a little sarcastic. If I don’t maintain a support contract with Microsoft, then I am looking at spending anywhere between $99 and $515 for professional support. I wish I had thought to charge $99 every time someone emailed me a question about Windows Installer (Note to self…). 🙂

In lieu of spending your hard-earned money on professional support, I thought I would direct you to what can often be more valuable, community support. There are many great resources in the nebulous cloud of the internet where you can find the information that you need concerning Windows Installer. The advantage of paying for it I guess would be the instant gratification of having an answer right away. What is not guaranteed is how long you will be on hold waiting for that answer.

The following is by no means a comprehensive list, but I believe this list should be in everyone’s link box:
Windows Installer SDK – SDKs are not always the easiest reading material, but this is by far the most comprehensive reference concerning Windows Installer.
microsoft.public.platformsdk.msi – The most active newsgroup discussing Windows Installer
microsoft.public.windows.msi – Another newsgroup resource, but not quite as active as the platformsdk group.
microsoft.public.win2000.msi – The least active Windows Installer newsgroup.
InstallSite.org – Excellent site run by Stefan Krueger that contains, tutorials, tools, downloads, forums, and more. The forums are an excellent place to ask questions and get help. InstallSite is a very active community. It is mostly InstallShield-centric, but Windows Installer is Windows Installer no matter what tool you are using.
InstallShield Forums – These are the official forums run by Macrovision, and this is also a very active community.
Wise Product Forums – These are the official Altiris (now Symantec) forums with yet another very active community.
wix-users Email Group on Nabble – Whether you are a user of WiX or not, this searchable archive of emails about WiX and Windows Installer contains an incredible wealth of information. If you would like to subscribe to the email list, you can do so here.

I am in no way putting down the Microsoft employees or their capabilities. I am sure they could provide you with very sound advice and help. However, if you don’t need your answer yesterday, 99 times out of 100 the community will come through for you.

I tried not to duplicate Chris’s earlier post too much. I wanted to focus more on where you can ask questions and receive answers. The community will appreciate it very much if you were to search for your question first to see if it has already been answered.

New Contributor

MessageBox.Show(“Hello World!”);

There really is no better way to introduce yourself as a fellow nerd than with a little bit of code. When Chris mentioned that he was looking for contributors, I jumped at the chance. I have been reading his and many other associated blogs for many years now and thought this would be a good opportunity to share what I have learned and am continuing to learn about the black cloud that is Windows Installer.

I got my start in the tech industry in 1995 on a contract at Ford Motor Company. Since then I have tried to make the most of my experience by inserting myself in to as many roles as possible. I started in the tech industry doing cable pulling, and system installs and repairs. I moved over to the help desk shortly after and did my “time”. 😉

I then jumped over to the administration side of things, first in client administration (this is where I was introduced to application repackaging), then network administration. I spent a few years doing administration and then moved into development. My exposure was light at first, mainly cgi-based web applications written in Perl. I then started to dabble more and more with Win32 middleware and UI development, and quickly engulfed myself in .NET development with the release of Visual Studio .NET.

I was hooked and took full advantage in my role as a consultant to utilize nearly all of my skills and experience while constantly learning new ones. I started with Wise Solutions, Inc., developers of Wise for Windows Installer and Wise Package Studio. Wise was shortly after purchased by Altiris where I spent an additional 3 and half years traveling the globe performing training, and consulting engagements. I loved it, but the need to be near my family outweighed my love for traveling the globe.

I am currently employed by a software company in the Phoenix area as a Development Support Architect. I specialize in things such as internal tools development and installation architecture. I also provide mentoring for the various development teams in existing and new technologies such as Windows Vista. My unique background and experience allows me to assist them in taking full advantage of the operating system in their development and ensuring that our entire suite of products can co-exist peacefully.

I look forward to contributing!