Partilhar via


Quick setup reverse engineering lesson - finding direct links to VS 2005 Express Edition beta 2 packages

I got a question from a customer asking for direct download locations for each of the VS 2005 Express Edition beta 2 packages. I replied to that customer with a blog post previously posted by a colleague of mine here. But as I thought about this question more, I realized that it is probably possible to figure out this information from the publicly available setup packages for the Express Edition beta 2 versions with a little bit of ingenuity and knowledge of setup technologies. So I decided to try to figure out the download locations myself without using any Microsoft internal web sites or discussion aliases as part of my data gathering.

Here is how I proceeded:

  1. Download the setup package for one of the VS 2005 Express Edition beta 2 packages - I randomly choose C# Express. Instead of choosing the Run button when I clicked the link, I choose to save the package to my desktop so I can pull it apart and look at the contents.
  2. Extract the contents of the setup package - when I save the package to my desktop I notice that the icon is a familiar one that normally indicates that the package is an IExpress self-extracting EXE. So I tried to open the package by using IExpress command line parameters to extract but not run the setup - vcssetup.exe /t:c:\temp /c (I know this syntax because the .NET Framework is an IExpress package and I commonly need to extract the MSI to help customers repair broken .NET Framework installations)
  3. Look at the extracted contents - Since there are a bunch of binary and non-binary files in the package, I make an educated guess that there is a generic setup.exe that is used for all Express Editions and there is some kind of data file in the self-extracting package that allows individual products to customize their appearance and/or behavior. As a result, I started out looking for files that appear to be data files that are used by setup.exe to control the behavior of C# Express setup. 
  4. Look for INI files - I find a file named locdata.ini. Opening that file in notepad shows a bunch of ComponentName values, so this appears to not be very useful for what I'm looking for (side note - in fact this is a list of strings used in setup UI so that setup can be localized).
  5. Look for files named setup.* - Doing this takes me to a file named setup.sdb. When I open this in notepad the results are much more promising. There is a bunch of information about "dialog pages" and even an item named BootstrapperURL at the top that use the syntax fwlink/?LinkId=##### . Since I noticed that the link I originally downloaded C# Express from was of the form https://go.microsoft.com/fwlink/?LinkId=\#\#\#\#\# I decide to try copying the BootstrapperURL and building a full URL using the prefix https://go.microsoft.com/ . When I enter that in my browser and choose Go I get a prompt to download vcssetup.exe again. So I'm getting closer but I'm not quite there yet.
  6. Look deeper into setup.sdb - As I continue to look at the contents of setup.sdb, I find a section named [VS Custom]. I see an entry in there that has the data ComponentFile=baseline.dat.Previously, I also happened to notice that the setup package I extracted contains a file named baseline.dat, so I decide to look there next.
  7. Look at baseline.dat - This file looks like it has a list of components that are part of C# Express setup or are prerequisites that setup does not install but requires to be present on the machine. Some of the components sections have URL values that use the syntax fwlink/?LinkId=##### just like the BootstrapperURL value in setup.sdb. I try to use the same trick as above to build a full URL for the item in [gencomp18] and I'm prompted to download dotnetfx.exe. So I've found the direct download location for the .NET Framework 2.0 beta 2 package! I build similar URLs for [vs_setup.dll] for the main C# Express installer, [gencomp30] for MSDN Express and [gencomp31] for SQL Express.

The only remaining trick is how to translate from the "fwlink" to the actual location on the Microsoft download center. Microsoft uses the concept of an "fwlink" (or forwarding link) to provide a public link that can be changed to a new location via some server-side settings later on. This is useful to allow users or other Microsoft products to link to locations and always have their links point to the most up-to-date versions of documents or products, even after other products have shipped with these links embedded in the product code or documentation. I have to admit I'm not much of an expert on networking, so the exact method of translating this is left an exercise for the reader :-) If anyone has an easy way to do this, please post a comment and I'll give it a try.

Comments

  • Anonymous
    May 27, 2005
    Hi Aaron,

    I posted a few queries @

    http://blogs.msdn.com/astebner/archive/2005/05/25/421645.aspx

    I request you to kindly solve my queries as i am planning to install VS 2005 beta 2 tomorrow.

    Thank you,
    Balaji K.
  • Anonymous
    May 27, 2005
    The comment has been removed
  • Anonymous
    June 02, 2005
    Hi Aaron,

    I am not sure if this is a known issue or if this has been documented anywhere. But, i downloaded VC# Express and VWD Express products from the links given in Hong Gao's blog. I didn't use the bootstrapper. Instead i used the entire product.

    When i ran those 2 setup files, i get 'Error 1308, source file not found' and it asks me to verify the existence of a host of files in Documents and SettingsAdministratorLocal SettingsTempIXP000.TMP. There are only 2 files - a cab file and a windows installer file in there.

    I kept ignoring those errors and both the products still managed to get installed. Is this a correct installation? Please let me know more about this situation.

    Thanks very much.
  • Anonymous
    June 02, 2005
    Installing from the bootstrapper (e.g. VB Express Bootstrapper http://download.microsoft.com/download/E/1/C/E1C75061-A229-49EA-BD0C-D0A7A22E8BA4/vbsetup.exe) is supported. However, installing from this link http://download.microsoft.com/download/0/5/7/057400B0-2895-4BB8-AE86-0975F066D783/Ixpvb.exe is not supported.

    If you are seeing this error when installing from the bootstrapper as opposed to the other package, please let me know.

    Thanks!
  • Anonymous
    June 02, 2005
    Alright. I guess, i'll uninstall the 2 express products and then re-install them using the bootstrapper. I'll get back to you, once i'm done.

    Thank You.
  • Anonymous
    June 02, 2005
    Hi,

    When i tried to uninstall VCS & VWD express editions using Add/Remove programs, it said that they might have already been removed from my computer and asked me if i want to remove those entries from Add/Remove Programs. I said yes but the fact is that VCSE & VWDE are still installed in my machine! Anyways, i am now uninstalling VCSE using the bootstrapper and it is now downloading the express editon. Let me see what's my experience from here.

    Balaji K.
  • Anonymous
    June 02, 2005
    Hi again!

    The bootstrapper successfully uninstalled and reinstalled the express editions. But the files that the bootstrapper downloaded were in fact Ixpvcs.exe and Ixpwd.exe. No change in them except that the bootstrapper didn't throw up any errors while installing the products. What's more, even my earlier product activations held good for the new installations.

    Balaji K.
  • Anonymous
    June 03, 2005
    The comment has been removed
  • Anonymous
    June 03, 2005
    Yes, my installations worked perfectly when i used the bootstrapper for both VWD and C#.

    The only mystery was, after i installed them directly(using Ixpvcs.exe and Ixpwd.exe), i couldn't uninstall them using add/remove programs. When i tried to do that, it said that they might have already been removed from my computer and asked me if i want to remove those entries. When i said yes, it removed those entries but both VWD and C# express were still installed in my puter. I needed the help of the bootstrapper to uninstall and reinstall them both.

    Thanks for your inputs and explanations!
  • Anonymous
    June 04, 2005
    I'm glad that things are working for you. I am a little surprised that the individual ixp*.exe packages behaved this way though. I will take a look on one of my test machines when I have some time in the next week or so and make sure there is not some kind of bug lurking somewhere in there...
  • Anonymous
    June 05, 2005
    Yes, i've successfully installed VS 2005 beta 2, SQL Server 2005 April CTP and the express editions.

    If and when you manage to test-install the individual ixp*.exe packages, kindly post the results.

    Thank You.
  • Anonymous
    June 16, 2005
    I have heard from a few people (including this customer comment on a previous blog post and a fellow...
  • Anonymous
    May 04, 2006
    Aaron,
      I used Microsoft's owm Fiddler HTTP debbing proxy which took me directly to the FWD link. Though everybody now has the full URLs to all the direct downloads thanks to Hao's blog I guess Fiddler can be used, well, to fiddle around in future.

    Cheers!
  • Anonymous
    August 22, 2010
    This can also be caused from something as simple as a pending Windows/MicrosoftUpdate restart entry.  If there's an especially sensitive situation (i.e. anything 64-bit or anything Vista+,) you'll get this right out of the gate.  I just got and found this page which, ironically, I trust, as it's where I found the trusty .NETfx Cleanup Utility!  I have a pending restart and also tried installing C++ 2008 security updates (successfully) at last boot.  However, trying to implement the actual Visual Studio myself with similar updates hanging in the balance + the actual updates either "confused" my OS or, I simply suspect, messed with the order of operations.  I've seen this before, as I admittedly stack-up pending-restart entries and suffer the brunt of it.  It's like registry cleaners, just don't do it.  Same goes for pending restarts.  Just my 2 cents, but take it from someone who's learned the hard way!  BTW, my solution was to install the express C# (with much chagrin.)