Archiv für die Kategorie 'Setup'

.NET: The Client Profile and Chip Specific Packages

Wednesday, 21. July 2010 at 7:22 am

In .NET 4 we have quite a few deployment options available for redistribution. There are basically 2 pivots. The Client/Full profiles and 32bit/32+64bit packages.

Here are the four redistributable options and their corresponding sizes.

Redistributable Size
32bit Client Profile 28.8 MB
32bit Full 35.3 MB
32+64bit Client Profile 41 MB
32+64bit Full 48.1 MB

The Client Profile is targeted to contain the parts of the .NET Framework that are used by most client applications and gives people the option to carry a little less payload if they use less of the Framework.

The 32+64bit packages are designed to give the option of installing either profile on any target machine regardless of OS architecture. On the other hand, if someone is targeting a pure 32bit customer segment, the 32bit package gives the option of reduced size with reduced breath of deployment.

Original post by Peter Marcu

von

Which Version of .NET is Built into Windows?

Friday, 5. February 2010 at 6:25 pm

Over the past few years I have been asked more and more which version of .NET is included in the operating system. The following chart shows from .NET 2.0 onward, which version of .NET is included in both the Client and Server Windows operating systems.

image

Note that this diagram also shows which pieces are optional and whether or not they are on by default in that particular OS.

Original post by Petermarcu

von

Errors after Installing Dev10 Beta2 over top of Beta1 on Vista RTM or SP1

Monday, 19. October 2009 at 11:01 pm

There is an issue upgrading .NET 4.0 from Beta1 to Beta2 only on Vista RTM and SP1 as well as Windows Server 2008 SP1. This is due to a known issue that was fixed in Vista SP2, Win7, and Windows Server 2008 R2. It is not an issue on XP.


There is a document available here for how you avoid the problem and directions for how to recover if you are already in a bad state.


 

Original post by Petermarcu

von

WiX: Removing Files with Patches

Wednesday, 20. May 2009 at 8:17 am

I’ve had numerous people ask me how to remove a file using a patch. As I say below again, this should be done carefully.

 

Background



If a file is present in a Baseline package then removed in the Upgrade package, it is not trivial to get the installer to remove the file in a way that uninstalling the patch will put it back.

 

Important!!! MUST READ

 

Before removing a file you need to make sure you have no other options. The only time you should remove a file using a patch is when the mere presence of the file causes problems. Consider removing references to the file from files that use it or patching it to be an “empty” file. Removing a file should be a last resort.

 

For shared files, removing a file with a patch could mean breaking any other product using that file. The removal of the file does not take reference counting into account when determining to remove a file. It will be removed if you tell it to be removed. Make sure you consider everything that uses or could use the file before removing it.

 




If a file must be removed by a patch there are a few options:


If the file is not a the keypath of its component:

- Remove the file from the component
- Add a RemoveFile entry to the component.


If the file is the keypath if its component:


If the file is the keypath, it means this file is the identity of the component. In this case the entire component must be removed. You cannot simply remove a component using a patch. If you do, you have to remove the entire feature which is not usually the desired scenario. If it is, then just remove the feature from your patch.


In order to remove a component without removing its feature you need to convince Windows Installer that the component isnt supposed to be installed but the msi database still needs to know about it. You can achieve this by making the component’s condition false. In order to cause a recalcalculation of the component during repair/patch you also need to mark the component as transitive. The side-affect of this is that when the patch is uninstalled, the file is not put back on the machine. This is because when the patch is removed, the component is no longer transitive and its condition is not reevaluated. You can solve this by shipping two patches. One that marks the component as transitive and a second that makes the component’s condition false.


Example:

<Component Id=”Foo” Transitive=”yes” … >
    <Condition>FALSE</Condition>
      …
</Component>


Notes and considerations:


In any case, uninstalling the patch may prompt for source if the file that needs to be put back is not available to the installer.


If building 2 patches for the transitive solution, you cannot base the two patches off of the same build because both changes are made to a single component which is the smallest level at which patches can be filtered. 

Original post by Petermarcu

Abgelegt von Deployment, Setup, Peter, Marcu, WiX
von

More on Haack’s Troubleshooting Windows MSI Installers

Friday, 6. March 2009 at 9:49 pm

Last night I was looking around to see how ASP.NET MVC was doing and noticed Phil Haack posted that ASP.NET MVC RC2 was available. I was disappointed that the RC2 was basically all setup work. My immediate thought was, "Why didn’t they get that stuff right in the first public release?" My second thought was, "Does that mean that previous releases have a poor setup that might be messing up machines?" My third thought was, "Hmm, I installed ASP.NET MVC Preview 4, Preview 5, and RC1… I might have one of those messed up machines."

I went to sleep and woke up this morning to find Phil Haack had a new post titled Troubleshooting Windows MSI Installers. My immediate thought was, "A product waited until the last possible moment to focus on their setup and now there are problems. Color me surprised." My second thought was, "MSIZap? WTF!?!"

Note: I’m picking on Phil a little here because he leads with some poor recommendations on his very popular blog with a generic title of "Troubleshooting Windows MSI Installers". It could really lead people down the wrong rabbit hole and misses an opportunity to actually improve the ecosystem.

MSIZap? WTF!?!

My visceral reaction to Phil’s post kicked in when I saw him recommending MSIZap at the top of his blog post. Phil has most of the right disclaimers in place by basically suggesting that MSIZap is a last resort tool. Unfortunately, he puts it up front as the first and most effective option to get unblocked.

There are three major issues with MSIZap and the poorly named Windows Installer Cleanup Utility:

  1. MSIZap nukes the registration of the product from the machine but does not actually remove anything the product installed. That means all the stuff you installed is still there and there is now no way to uninstall it (except by hunting it down manually). That left over debris leads us to issue number two.
  2. Your machine is now in an unknown state. The information about what is installed has been surgically eviscerated and when you install the next version (assuming you do that) it will be dealing with debris that it was not designed to encounter (due to issue number one above). Way back when in Office, I’d sometimes get a tester saying that the new build failed to install and they were blocked. After looking at a very bizarre error case for entirely too long, I’d ask exactly what steps they took to get into this state. They’d say, "Oh, I just MSIZapped the previous install." I would nod and say, "Cool, you invalidated your machine. Format and start over." I was nonchalant about it because MSIZap removed our ability to debug the root issue, which brings me to the third point.
  3. You have lost the ability to figure out what went actually wrong. Debugging Windows Installer failures is a matter of analyzing a verbose log file captured from the failed setup operation. As noted above, MSIZap removes the ability to do that. Now, Phil actually provides the information how to do that (msiexec /l*v or the Logging policy). Unfortunately, rather than asking people to send failed logs to his team for diagnosis, Phil proposes people MSIZap when uninstall fails thus moving into a non-debuggable unknown state.

Orca? FTW!?!

Now I love Orca as much as the next setup developer but I would never recommend that users (even if those users are developers) open my MSI package with the editor and start cutting out pieces. That’s like suggesting that a user go in with an assembler and edit a compiled binary to work around a crashing bug.

Phil even suggests that "Editing the MSI is not really encouraged since it may cause other problems such as failing to uninstall properly." That or failing to install the product correctly or pretty much anything else. In my mind this is just another way to get into a completely unsupported state. I don’t know why Orca is listed as a solution to the problem.

Windows Installer? NO FAIL!

Typically, when this sort of things happens I see everyone pointing at the Windows Installer as the root of the problems. To his credit, Phil does not blame the Windows Installer and there is only one comment on his blog at the time of my writing that does. I make this point because based on the information presented it appear that the root of ASP.NET MVC’s failure issues are all in systems developed by Visual Studio: NGEN and devenv /setup.

That means Phil should be able to walk across the hall or across the street and pass along a whole lot of "FAIL" to one or more teams. A follow up blog post today suggests that Phil has already started doing that which is fantastic. My hope is that he will go further and help Visual Studio fix two pieces of the deployment world that I’ve also found (in my experience with the WiX toolset) to be fragile. The devenv /setup is of a particularly poor design.

What would I have done differently?

Phil’s heart is clearly in the right place. He wants all developers to be able to experience the glory that is ASP.NET MVC and doesn’t want its installation to deter from that experience. I can get behind that desire so here’s what I would recommend doing differently:

  1. Ensure setup is ready from the beginning and that everyone uses it. As Phil is discovering, there are lots of different machine configurations to take into account. Get your setup testing started as soon as you have a build to hand out. I know a lot of developers like to have a "batch file" setup that has all kinds of special ways to get things installed on their machine. They do this to be "faster" or just to "avoid setup". That approach ends up being detrimental to the product because you are now maintaining two ways to install and the one that gets used the most (by the developers and testers for day to day stuff) isn’t the one that gets shipped. Finally, when setup is done at the last minute (like RC2) those design decisions that were made early may come back to bite you.
  2. When you have a problem, make a plea to have anyone with a setup failure to send in log files. ASP.NET MVC is built for technically savvy people so it should be easy to post instructions on how to capture those logs. ASP.NET MVC also seems to have a pretty strong community built around it, so I believe they would have flooded the team with data.
  3. With the data build a solution. I expect that a new MSI could be built to address the problems. Then you send the fix and instructions out to all of those with the problem.  It would probably be something like a recache/reinstall (msiexec /fv, a supported switch) over top the problematic install then uninstall. That way the machine stays in a known state and the setup incrementally improves.
  4. With the data go improve other parts of the platform. ASP.NET MVC isn’t alone in their installation woes with NGEN and devenv /setup. By turning their installation problem into an opportunity to learn they can help improve other parts of the system that are shared with many products. Then everybody wins.

 

tags: , , , , , , ,

Original post by Rob Mensching

Abgelegt von Setup
von

WiX toolset supports MSI 5.0.

Tuesday, 20. January 2009 at 7:27 am

WiX toolset Two weekends ago, Windows 7 beta builds were made available. That meant the new MSI SDK was available on MSDN with all the information about what’s new in MSI 5.0. In turn, that meant we had some work to do to teach the WiX toolset some new tricks.

Bob and I split the work up last Wednesday. He took the "UI work" and I took the "server work". After a couple nights of coding (interrupted by all the other things we get interrupted by) we had all of the functionality designed, built, debugged and posted to SourceForge in the latest WiX toolset release. I’ll talk about the features I implemented in detail later but Bob has a nice overview of the changes on his blog..

Staying current with the Windows Installer changes is important to those of us that work on the WiX toolset. That is why we work hard to get the changes in as quickly as possible. In addition to staying current, we also help flush out bugs for the Windows Installer team. I think Bob and I have reported six bugs (mostly documentation issues) so far. Those of you that pick up these builds will help further validate both the WiX toolset and Windows Installer 5.0.

So keep coding, you know I am.

 

tags: , , , , , , ,

Original post by Rob Mensching

Abgelegt von Setup, WiX
von

.NET: Do you Deploy a Managed App?

Saturday, 20. September 2008 at 8:16 pm

Do you own the deployment of your product and require the .NET Framework to be installed before you can install your application? If so, I want to hear from you.


I have a few general questions but any comments are welcome as long as they are constructive and actionable. My goal is to use this data to do what I can to improve the .NET Framework Redist experience in future versions.

Do you have a bootstrapper/chainer that preinstalls .NET? If so, which one (VSI, InstallShield, Wise, ClickOnce, custom)?
Do you block and point your user to the location to download and install .NET?
How large is your application?
How is your product deployed (Web download, CD, DVD, USB)?
What do you think about the size of the .NET package?
Do you know about the small package for .NET 3.5 that will download only what your user need? If so, do you use it?
What do you like about the .NET Framework Redist?
What do you dislike about the .NET Framework Redist?
Do you have any specific problems you can tell me about that you have had in deploying the .NET Framework?


Like I said, the info above will be helpful to me but I dont want to limit responses to these questions. We have a lot of data about the various issues people encounter while installing the .NET Framework but we dont have as much data about the ways people are deploying it and using it as part of their deployment. This is the type of info I’m looking to gather.


You can post as a comment or email me the info if you dont want it posted and seen by all.

Original post by Petermarcu

von

WiX: Patching something you didnt build with WiX using WiX

Saturday, 31. May 2008 at 1:05 am

Many times people want to take advantage of the Wix v3 patch building features but didnt build their original product using Wix. for example, they may have used Install Shield, WiX v2 or one of the other tools out there. I ran into this when I needed to create a patch for a product we shipped from Visual Studio before the Visual Studio build moved to WiX v3.


 WiX v3 has a feature I added a while back to support this scenario. It allows you to point at an admin image of your msi based install package. This will be very familiar to some of you who have used patchwiz and pcp’s in the past. The difference here is that your patch authoring can be done using the WiX v3 Patch element and it follows the same workflow as patching a WiX v3 based msi after the first stage of creating the diffs.


Something I found really easy, and I could see this being used by smaller products who dont have a lot of infrastructure, is the ability to hand edit your admin image to product the patch. For example, I wanted to update a single file in my product:


1. I created an admin image
2. I made a copy of the admin image
3. I updated the loose file in my copy of the admin image


After running it through the series of command lines, I got a patch that updated the file. Pretty simple…


The command lines you need to run are all the same as the ones in my sample: Building a Patch using the new Patch Building System - Part 3. The only difference is that you need to pass the -ax command with a path to extract embedded binaries to instead of the -xi switch. This tells torch that the input is admin image instead of xml. Also, specify the path to the msi in the admin images instead of the wixpdb as the target and upgrade. Everything after that should follow the same process.


Let me know how it works! :)


Bonus feature: One of the most useful things in the WiX v3 patching system is the ability to filter whats in your patch using patch families to only ship your customers the updates they need. This allows you to grab changes per Fragment from your wix source. When patching from admin images, there is no source so you would think that the filtering isn’t suppoted. Not so! This was one of the more fun parts of this implementation. We “auto-fragment” the msi into what we consider to be the optimal chunks to give you the ability to filter if you choose to do so.

Original post by Petermarcu

von