AdamTheTech Logo
Enthusiast of Technology, Web Development, and Sci-Fi

Microsoft’s Free Virtual Machine Images

Deus Ex: Human Revolution Review

Embed dll Files Within an exe (C# WinForms)

Microsoft’s Free Virtual Machine Images

I have been using Microsoft’s free virtual machine images for a few years now for browser testing and to help me navigate the various operating systems when a user calls me for support.

Microsoft released their new images and can be found here:

Note that if you find yourself depending on these images more and more, it seems to take about a month or so for Microsoft to update the images after the expiration date, so keep that in mind when that time of the year comes. When the last set of images expired in the beginning of November, the new images weren’t available until mid-December.

Virtual Machine Uses

These images offer Windows XP, Windows Vista, and Windows 7. Each platform has a version of the Internet Explorer browser available. While IETester offers a quick way to test websites with the various IE browser engines, it’s still not as good as having the real thing to work with. Additionally, IETester only works with the highest version of IE that you have installed. For example, if you only have IE8 installed, IETester can only work with IE engines up to IE8.

A side benefit to having the different operating systems available is that if you do any sort of tech support, it’s likely that your users/clients use different versions of Windows. So, whenever I find myself needing to guide users over the phone through a series of steps that may vary from operating system to operating system, I find that having these virtual images available helps considerably.

A third benefit is that virtual images allow you to have a place to test software that you may not necessarily want to test in a live environment or on your native operating system. This technique is called “sandboxing” because it allows you to isolate what you’re testing inside its own enclosed environment (or “box”). For example, not to long ago, I was testing various application firewalls to replace an older discontinued application firewall. As such, installing and uninstalling all these different firewalls would have eventually had a negative impact on my native operating system (for various reasons). Since I was testing in a virtual machine, all I had to do was discard the changes, and install the next one I wanted to test.

Virtual Machine Software

These virtual images are in the VHD disk image format. The one caveat in the EULA to using these images is that they must stay in the VHD format and cannot be converted to any other disk image format. You can run these virtual images using Microsoft Virtual PC or VirtualBox, as both support VHD image files and are freely available.

The current version of Microsoft Virtual PC is advertised with XP Mode.  XP Mode includes a fully licensed virtual machine image if you are running Windows 7 Professional, Enterprise, or Ultimate. If you aren’t running any of those editions, you can download Virtual PC without XP mode by clicking the link “Don’t need XP Mode and want VPC only? Download Windows Virtual PC without Windows XP Mode” and selecting your operating system.

If you still need the older version, Virtual PC 2007 for Windows XP or Vista, it is still available here:

However, for Virtual PC 2007, make sure you install the service pack and hotfixes in the order listed below:

  1. Service Pack 1:
  2. Hotfix rollup (scroll to the “Resolution” section for the download):
  3. Security update:

Best Practices

When you use these virtual machines, keep in mind they won’t nearly be as fast as your native operating system because they are running on top of your native operating system. To get the most out of your virtual machines, make sure you have enough physical RAM to run what you need in your native environment as well as in the virtual machine. I recommend at least a minimum of 2GB of physical RAM in order to run just one virtual machine.

Here is what I have found that works well as a bare minimum for allocating RAM for each virtual machine:

  • Windows XP virtual machine: 512MB RAM
  • Windows Vista virtual machine: 512MB RAM
  • Windows 7 virtual machine: 768MB RAM

It also helps to host the VHD file on a separate hard drive. Running your native operating system as well as a virtual machine from the same drive tends to reduce performance.

Deus Ex: Human Revolution Review

Deus Ex: Human Revolution is the prequel to the highly acclaimed game Deus Ex, which was released in 2000.  The events in Human Revolution (abbreviated as DX:HR) take place in 2027–25 years before the events in Deus Ex. These events follow Adam Jensen, a security chief for one of the game’s most powerful corporations: Sarif Industries. This is a world in which corporations have overshadowed world governments. As such, they have become targets for less savory individuals desiring simple destruction, or power and control. After a devastating attack on Sarif Industries, Adam Jensen is forced to undergo life-saving surgery and is infused with mechanical augmentations–a highly advanced and experimental form of biotechnology capable of granting individuals amazing strength and abilities beyond those of mortal men. Following the aftermath of the attack, Adam Jensen takes up the search for those responsible.


The game’s development started in 2007 and was developed by Eidos Montreal. DX:HR is the first game to be released from the Eidos Montreal game development studio. Since primary development for the game would be for the console and since the developers didn’t want the game just to be just another lackluster console port for the PC, they gave the PC edition special attention by partnering with Nixxes Software to develop the PC edition of DX:HR in the final year of the game’s development. The game’s engine was based on the Crystal game engine used built by Crystal Dynamics, which was originally used in a 2006 release of Tomb Raider. It was modified and updated for use in DX:HR. DX:HR was published by Square Enix.

DX:HR is available on Xbox 360, PlayStation 3, Windows PCs, and coming Winter 2011, on OS X.


There are a few things to take into account before getting into the core of the review:

  1. It’s hard for a self-respecting gamer to say this, but I never played the original game. Since this is a prequel to the original Deus Ex, playing the original is technically not required. However, some easter eggs, gags, and references which lead up to Deus Ex will then be entirely missed.
  2. There is a point in the game where you can choose a starting gameplay style: lethal or non-lethal with short-range or long-range weaponry. I chose non-lethal and long-range. This choice only affects the weapon you start with.
  3. Medium difficulty. I expect most gamers who have played other shooters or RPG action games would select this level of difficulty.
  4. This is the PC edition of the game. There are differences between the console edition and PC edition, but they are largely cosmetic in nature and don’t affect content or gameplay.

The Good Things

  • Multiple styles of gameplay were possible. If you wanted to be Rambo, you could do that. If you wanted to be stealthy, you could do that too. If you wanted knock everyone out instead of killing them, you could also take that approach (though it was certainly more challenging, considering that non-lethal ammo was very scarce). If you wanted to explore every corner of the environment, you could, and if you didn’t, gameplay didn’t suffer too much (although you would’ve missed out on some hidden goodies). Lastly, you weren’t forced to play to any one style. You could be stealthy in one area and go in with guns blazing in the next. It was very fluid. Certain areas of the game made it more challenging to take one approach over another, but never impossible. There was always more than one avenue for success.
  • Hidden goodies were everywhere (weapons, ammo, miscellaneous items).
  • The detail. There was a lot of detail. Plot detail. Level detail. Character detail. Technical details. The world of Deus Ex was also chock full of gags and easter eggs if you paid attention and looked hard enough–from big signs down to little post-it notes. For instance, similar to email accounts in the real world, even email accounts in Deus Ex were hit by Nigerian spam.
  • In terms of style, everything fits. Everything follows a consistent theme. Because of this, cities look and feel like cities. Offices look and feel like offices. Props which can be used for cover blend right in to the surrounding environment like they are supposed to be there. Very little blatantly stands out and interrupts the game or its environment.
  • Good weapon variety beyond the standard pistols, machine guns, and shotgun.
  • Long play time. Instead of the typical 6-10 hour game length, expect 25-30 hours easily, especially if you follow through on all the side missions and explore a little bit. Double that if you decide to play through the game for a second time.
  • Regenerating health. While it was a little annoying to have to wait for heath to regenerate, it was a good tradeoff between that and having to interrupt the game to backtrack and scrounge for health packs.
  • While combat mode was in first-person, the cover system switched to third-person fairly seamlessly with a minimal number of glitches. The third-person view offers the a wider field of view, minimizes the issue of wacky camera motions which usually comes with using a third-person view, and allows you to aim a weapon or wildly shoot over your shoulder from cover.
  • The hacking puzzle mini-games didn’t detract from the overall game, unlike the pipe mania puzzles found in the Bioshock game series. DX:HR’s hacking puzzles tended to vary more and offer rewards for taking risks. Hacking also didn’t halt the environment around you, so on occasion, you could be attacked while attempting to hack a door or safe.
  • Some decisions or actions you take in some of the missions had consequences or rewards later into the game, depending on how you completed them.
  • If you defeat enemies using non-lethal methods, you gain more experience points than by using lethal methods (since employing non-lethal methods are typically more challenging).
  • When enemies are defeated, you have to move the body out of the line of sight of cameras or other enemies. Otherwise, they may see the body and trigger an alarm. If an enemy is only unconscious, his cohorts will then help revive him. This is an interesting game mechanic which adds a bit more depth and challenge to the game.
  • Certain upgrades (or augmentations) can affect your style of gameplay and grant access to hidden rooms, passages, and treasures that would otherwise be inaccessible without the upgrade(s). Since not everything can be fully upgraded, careful consideration of what to upgrade and how it fits into your gameplay style must be made.
  • The sound effects and music were seamless.
  • Certain cutting edge graphics features were present, such as tessellation, HDR, Depth-of-Field, and multi-monitor support.

The Bad Things

  • Load times weren’t great. There was enough time to get up, use the bathroom, get a drink, fix a snack, come back and sit down and still wait a few moments for the game to load (I exaggerate slightly. But not much). After a level would load and finally allow you to interact with the environment, the first 5 seconds stuttered horribly as if the level didn’t actually yet finish loading.  However, from the looks of it, a recent update may have addressed these issues.
  • The game still has some annoying bugs in it:
    • When a mission requires you to read something, it doesn’t always register as being completed after reading it.
    • In rare instances, your weapons would stop responding to the firing button/key and wouldn’t fire again until you reloaded a save point.
    • A few exit points in levels are indicated as the next destination in missions, however, the navigation compass points to exits which are actually inaccessible. The mission descriptions do not indicate that you need to exit the current level and to go to a different one. This led to a lot of wasted time backtracking and looking for hidden pathways. An alternate exit must be located instead.
    • While more amusing than annoying, the bodies of defeated enemies occasionally got stuck in walls or shoved down through floors when trampled by other living enemies. These displaced bodies continued to jerk around and make noise.
  • Exits/doors to other levels weren’t clearly labeled as a level exit, which would trigger the loading screen. It may have been better to have these special doors indicated in a different highlighted color or pattern, rather than just by the tiny label that appears after a second or two.
  • The inventory system was limiting, considering weapons took up so much space and grenades each used up one slot/block, rather than being grouped together like other items. It wasn’t clear which items or how many of them could to be grouped in a single slot/block, since they tended to vary between different types of  items.
  • Ammo was rare and tended to be used up fast, especially when facing armored enemies with heavy rifles. Available ammo wasn’t consistent for weapon types, so you needed to keep multiple weapons in the inventory. Dropping weapons would also mean losing their upgrades, so you would have to hang on to them, as upgrades were somewhat rare.  Then, of course, the size of the inventory was limiting, as mentioned before. But, this is probably just what happens when combining RPG game elements into a FPS game; it leads to granular inventory management. If there was a single area that hindered the game the most it was inventory management and limited ammo.
  • There was no quicksave/quickload hotkey. To save/load a point in the game, the menu system needed to be used. This became tedious, especially if you like to quicksave before entering new areas or before facing new enemies.
  • Some cutscenes were pre-rendered, while others used in-game mechanics and graphics. The pre-rendered cutscenes didn’t seem to offer any graphics better than what was already present in-game. The pre-rendered cutscenes tended to interrupt the flow of the game, especially since they eliminated some potential action from gameplay. They were highly compressed and pixilated, so there was a significant and jarring visual difference between the game and the cutscene.
  • The graphics engine of the game did not look modern when compared to other games released this year or in years prior. DX:HR used low resolution textures with high resolution rendering, which led to an odd visual combination.  Games released prior to DX:HR seemed to offer a higher degree of polish and immersive realism, such as Crysis, Left4Dead, Doom3, Unreal Tournament 3, and Dead Space.  But to be fair–most of these blockbuster games had more recent game engines to build upon, had larger budgets, and had a development studio with more than one game release under their belt.
  • The skyboxes meant to display sprawling vistas were just flat, pixelated images. It was surprising to see such a primitive skybox technique in use when compared to the other cutting edge technologies present in the game.
  • Most of the characters look like they were built from a collection of shapes, rather than offer the illusion of representing an individual (a fault of the dated graphics engine the game was based upon, most likely). Facial expressions appeared to be fairly limited beyond the basic phoneme animations.
  • There is little feedback based on your gameplay style. If you choose a non-lethal path and eliminate enemies without shedding blood, there is no comment made about it. If you choose a lethal gameplay style, and start taking out enemies, hostages, and civilians, there are no consequences. Civilians will typically duck and raise their hands if you start a firefight in public, but that is about the extent of the reaction in the wake of the horrors in a path of destruction.
  • There aren’t enough ways to approach boss fights. The only techniques which seem to work are to run, hide, and attack. And if you could stun with either grenades or the stun gun, that would help a bit. The bottom line is that you had to be carrying a small arsenal and use up a lot of ammo in order to defeat any of the bosses. A game should lead up to a boss fight so a player can apply all that they have learned in order to defeat a boss. This was not the case here.  Any of the other playstyles which were learned earlier in the game were completely ineffective. Lastly, a non-lethal approach was impossible in boss fights, as game itself does not allow this approach with bosses.
  • While there isn’t much of a story, there is certainly a lot in terms of plot which propels the game forward. Plot is just the progression of events. Story uses plot to express an idea, or show change in an idea or character. The protagonist in this game doesn’t change or evolve as a character–he just delivers his lines in the same deadpan manner throughout the entire game. The idea that augmentation is bad doesn’t change throughout the game (or maybe that’s the point?). The plot (or “series of assorted accidents”) fails to build upon anything. After a while, tension falls flat because of the predictable succession of encountering quest after quest. The plot is just a linear progression of overcomplicated events which overwhelm and suffocate what little there is of a story.
  • (Spoiler!) Final battle of the game seemed really out of place and didn’t fit into the narrative being told up to that point. It seemed rushed, didn’t flow well, and was much less challenging than the boss fights offered earlier in the game. However, it did allow for slightly more flexibility with different gameplay styles.
  • (Spoiler!) The final point before the ending cutscene essentially allowed you to choose how the game ended, rather than lead to an ending based on your decisions and actions made throughout the course of the game.
  • If you want to play DX: HR again, you will have to start from scratch. Comparatively, the game “Borderlands” allowed a second playthrough, which increased the difficulty and allowed the player to keep all their weapons and upgrades.
  • Approaching the end of the game, characters tended to be very vocal about their views about augmentation, or rather, views that would reflect the real-world fields of genetic engineering, bioengineering, and biotechnology. In the game, these technological advancements were primarily portrayed in a very negative light and that it was spiraling out of control. These views seemed very pushy, especially for being inside a video game.

The Last Word

Overall, DX:HR is a fun, engaging, and entertaining game which almost begs you to play it a second time. This is one of the few games that has made me quickly consider another playthrough. Most of the good things about this game are very good. Many of the bad things could be considered nitpicky criticisms. Yes, DX:HR has flaws, but it’s extremely rare for a game not to. None of the flaws are show-stoppers and don’t detract from enjoying the gaming experience as a whole.

If you do play it a second time, take a look at some walkthroughs and hint guides so you don’t miss a thing. A good, concise guide can be found over at IGN and a more in-depth wiki guide can be found on wikia.

A DLC is planned for release in October, but pricing has yet to be announced. This DLC will continue the adventures of Adam Jensen from a point within the story of DX:HR.

New Theme is Live!

The new theme for is live!

There is still a lot of work to do with the new theme, but the basic framework is now up and running. Enjoy!

Embed dll Files Within an exe (C# WinForms)

A while back I was working on a small C# WinForms application in Visual Studio 2008. For the sake of simplifying the deployment process of the application, having all of its components bundled up into one exe file would make it much easier to manage. But–documentation and tutorials on embedding dll files within an exe file were outdated, incomplete, or simply didn’t work.

The best example out of the lot was an excerpt from a book, posted on an MSDN blog by its author. Unfortunately, it didn’t work as presented and didn’t include clear instructions on how or where to implement it. However, it still offered a very good starting point. After some research, trial and error, and with the help of the Visual Studio debugger, here’s the solution.

Note: This method allows you to place dll files into any subfolder or series of subfolders within your project without needing to change any code after the fact. If you wish to forgo the use of a subfolder (placing the dll files in the project root), or use a hard-coded path to your subfolder(s) containing the dll files instead, there are alternative methods which would be more appropriate, but won’t be covered here.

1) The dll files themselves need to be embedded in the Visual Studio project, rather than just referenced. In your project, create a folder in the project’s root to store the dll files (right click on the project name > add > new folder) . I named mine “lib”.

2) Copy and paste your dll (and any accompanying support or definition files) into the lib folder. For purposes of this tutorial, the example dll used will be Cassia.

3) Next, include the dll as a project resource. Right click on the project name > properties (or Project menu > yourprojectname Properties). Go to the “Resources” tab.

Select “Files”, as shown here:

Click “Add Resource”, change the file type to “all files”, and navigate to the “lib” file where your dll is located. Select it and click “Open”.

The dll file should now be included as a project resource:

4) Add a reference to the dll file in the project. In the Solution Explorer pane, right click on “References” > Add Reference (Or, Project menu > Add Reference). Click the Browse tab, navigate to the lib folder where the dll is located, select the dll file, and click “Ok”. A reference to your dll will then appear under the references folder in your project.

5) By default, compiled files and project references are copied to the bin folder when the project is built. This will need to be prevented. Under the “References” folder, select the reference to your dll file. In the properties pane (or right click > properties), look for the attribute named “Copy to output directory”, and set the value to false.

Next, select the dll file under the “lib” folder. In the properties pane, look for the attribute “copy to output directory” and set the value to “Do not copy”.

Also look for the attribute “Build Action” and set the value to “Embedded Resource”. This indicates how the file will be treated and accessed when the project is built.

Lastly, exclude extraneous files accompanying the dll file, such as help files and XML definitions files–they are not needed in the project when it is built. Right click on the file (such as the XML definitions file) and click “Exclude From Project”. Now it will not be copied to the bin folder when the project is built.

6) In the code view  for your executing WinForm, include the namespace System.Reflections. This is important for some of the code responsible for loading your embedded dll file(s).

7) In the code view for your executing WinForm, this code should be placed in the constructor method (usually named the same as the form). It needs to appear before the InitializeComponent() method:

            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
                string resourceName = new AssemblyName(args.Name).Name + ".dll";
                string resource = Array.Find(this.GetType().Assembly.GetManifestResourceNames(), element => element.EndsWith(resourceName));

                using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
                    Byte[] assemblyData = new Byte[stream.Length];
                    stream.Read(assemblyData, 0, assemblyData.Length);
                    return Assembly.Load(assemblyData);

Upon launching the exe, this code is responsible for detecting what dll files are needed and are being referenced, and load them from their embedded location.

8) In the code view for your executing WinForms application, you can now include the dll file’s namespace(s) .

9) In order to test everything, you will need to implement code from the dll file’s namespace(s), so that the AssemblyResolve event is triggered. However, if you include code from the dll’s namespace(s) within the constructor, Application.Run() will throw a “file not found” error for your dll file when the WinForms application is built and executed.

To correct this, you will need to place any code using the dll file namespace(s) in another method outside of constructor method. This is because the event handler for the assembler cannot be located within the same method that is calling it. It’s simple enough to do, but it’s just one caveat to be aware of.

It’s Live! is now live!

Currently, features over 100 articles written by Adam going back to 2004. The site’s template will remain as one of the default WordPress templates for now.

The newest article–completely unique to–is an Introduction to Social Networking. Enjoy!

Taming Pandora Music Radio is quite a nice web application. If you’re not familiar with Internet Radio, it’s a way to stream music to your computer according to may want to listen to, without having to create mixes of music on your own. Most of the time, there’s no audio advertising, which was one upside to mixing your own music.

Pandora is different from other Internet Radio stations in that you’re not locked into what the stream owners play (much like how FM radio runs), but you can actually rate which songs you like or don’t like.

You start out creating a station by selecting a specific song or artist you like, and Pandora branches out and tries to find music similar to that. Only, a lot of the time, it branches out too far and ends up playing music that you don’t really want to hear. It’s at this point that most people wander away with the idea that “Pandora sucks”.

It doesn’t. The general idea of Pandora is to use it to explore all kinds of music, but many times, you just want a specific kind of music. Here’s how to do that.

1) Basically, you have to actively give a “thumbs up” or “thumbs down” rating on a good many songs before you start getting very consistent results. If you give no rating at all, Pandora will keep playing songs that branch further and further away to what you may have originally wanted.

For example, I wanted to make a station with Irish rock music, with Flogging Molly being the seed artist. If I left it alone for a while, it would start getting into Johnny Cash and random Country music. Go figure. Once I started giving a “thumbs down” to that kind of music (even if it *was* good music), I got back on track to playing just Irish rock.

2) Be critical of your “I like/don’t like” ratings. If you want a particular sound for a station, give it a thumbs up or thumbs down according to what you want for that particular station–NOT if you like the song in general. If you like the song enough, create a new station with that song as the seed (click on the album art, and to the right of “New Station:” click either “From song” or “From artist.”).

If you don’t stick to a theme, your station will become mishmash of different kinds of music. Personally, I like to keep lists of different kinds of music depending on my mood and what I want to listen to.

3) Add additional seed songs or artists. That usually helps when trying to keep to a certain kind of music on a station. To do this, click the down arrow on the station name, and click “edit this station”. Hit the “Add” buttons under Artist or Song.

4) Once you click on the Pandora player to give it focus, you can use keyboard shortcuts to control your station, so you don’t always have to fiddle with the interface while doing other things.

If you follow these tips, you will certainly find that you’re listening to more music that you like, and in the end, enjoy Pandora’s offerings a bit more. Happy listening!

(Originally published on

Reveal TinyURL Links

While TinyURLs can sometimes be handy and short and pretty to pass around and post in your blog, they also effectively hide the original URL.  What this means, is that sometimes, people can hide all sorts of URLs behind it, including those you may not really want to visit.

Here are two ways you can unmask those URLs.

The first way is to bookmark this link (right click on the link, bookmark link or add to favorites):


Whenever you visit a page that has TinyURLs on it, click the bookmarked link, and it will replace all the TinyURLs with their actual URLs.  You can visit the author’s site for this tool here:

The second way is go directly to the TinyURL site and click the “enable previews” link:

You can also bookmark the enable link directly:

You will have to have cookies enabled for this to work.  Basically, what it does is visit the TinyURL website when you click on a TinyURL, show you what the actual link looks like, and at which time, you can choose whether or not you really want to visit the link.

(Originally published on

Can Your Computer Run It?

Here’s an interesting site that’s useful in a pinch for determining whether or not a certain game will be able to run on your hardware: Can You Run It.

Basically, you select the game from the dropdown and hit the “can you run it” button.  This will work in either IE or Firefox (sorry Opera folks…it’s a no-go).  It then gives you a breakdown of which pieces of hardware are holding you back (CPU, RAM, video card, etc) according to the game’s minimum requirements and recommended requirements.

(Originally published on

Find Installed Hardware & Software Without Opening Your PC

Sometimes, unplugging everything from your PC and opening it up just to find out what the model of the motherboard or PCI card is turns out to be a real pain.  There are a few utilities out there that you can simply run and they will tell you what hardware and software live in your PC.

One of the more popular system audit applications is Belarc Advisor.  After installing, you can run it, and it generates an HTML report listing installed hardware and software.  It’s very easy to use.

Another (albeit lesser-known) system audit application is SIW.  This one requires no installation, and offers excessive detail on installed hardware and software.  To build a report, simply go to the “File” menu > “Create Report” and click “HTML”.  This will create a report in an HTML file that will be fairly easy to navigate.  Just let me stress this is a highly detailed report.  If you click the “Options” button on the report generator window that pops up, it will allow you to select what areas of detail you want to see in the report.

Either one of these are handy tools to put on your USB flash drive.  Be sure to give each one a couple minutes or so to build the reports.

(Originally published on

Free Games

Tired of the same ol’ games you’ve been playing for months?  Can’t find anything new to play?  You’re in luck–Wikipedia has two lists of free games that you can download and play.  And no, most of them don’t fall under the category of cheesy flash-based games on the web.  Many of them are similar to what you would find on shelves today, or even in the style of console game favorites.

Freeware games

Open Source games

The only difference between the two lists is that open source games distribute the source code and allow modifications.  Otherwise, if you are simply looking for a game to play, anything on those lists is up for grabs.  Have fun!

(Originally published on