Author Archive

ISV Guidelines for Hosted Microsoft Dynamics CRM 4.0 Part 1

February 16, 2009 Leave a comment

ISV Guidelines for Hosted Microsoft Dynamics CRM 4.0 Part 1

The intent of this series of blogs is to provide a basic guideline for Service Providers looking to offer CRM as a target platform for ISV’s looking to deploy their application on the Internet as a Software as a Service (SaaS) model.  It’s also a guide for ISV’s to understand that the design decisions they make during development will have a profound impact on their available hosting with regards to deployment architectures and pricing.

  • Part 1: Introduction
  • Part 2: CRM as an Application or Platform
  • Part 3: Shared or Virtualization Deployment & Licensing
  • Part 4: Provisioning & Control Panels
  • Part 5: Making the Leap


With the release of Microsoft Dynamics CRM 4.0 (MSCRM4), Microsoft has provided not only a great CRM application, but also a business application platform.  There are many software vendors and consulting organizations that have already leveraged MSCRM4 in the traditional deployment where the application or solution is installed locally on a customers server.  This scenario is typically called “On-Premise”.  While this deployment model works great for some customers, many business departments are looking to gain access to applications that improve their business, but without the hassle and cost of deployment and operations within their IT department.  It’s not that an IT department can’t handle new applications, but it takes time, money, and knowledge to add a new application into the business.  Business applications that are hosted on the Internet and accessible via a traditional browser is known as “Software as a Service” (SaaS).  The business world is all abuzz about SaaS and it’s potential impact to deliver rich applications to departments, on-demand, with a monthly fee, and without the need for upfront deployment or hardware costs.  Sounds Great, right?  Well for some scenarios it is pretty great, but there are a number of other reasons why this might not be so hot (e.g. Security, Internet Outage, Performance, End User Training, etc.).

Here are some examples of where the SaaS deployment model is so interesting for many customers:

  1. Trial – Your software may be great and the value is high, but how will the customer know if they can’t try it in all it’s glory?  Sure they could download the software and use it, but not it requires hardware, time, and the knowledge to get it installed and configured.  With the SaaS based model, they can get access to your application instantly!  Even if they are interested in an on-premise deployment, they can at least get the feel for it right away which will help with their buying decision.
  2. Temporary Usage – Some customers may decide that they do want the on-premise version.  This could be for any number of reasons the customer may have or because your on-premise version has more capabilities (e.g. integration with a VOIP solution, devices, etc.) than the SaaS version.  In this scenario, the customer goes beyond the trial online and wants to continue to use it.  Let’s say it’s going to take six months for the customers IT team to purchase, deploy, and operationalize [killing the English language] an environment for the on-premise version.  So until then, the customer uses the SaaS version.  This gives the customer some flexibility in their deployment, instant access to the application which will improve their business, and increases your sales and revenue.
  3. Migrations – I’m sure you’d seen a number of customers that would LOVE to go to a new version of a software application they’ve been using, but the time and cost to upgrade hardware, update the data, and learn the new platform is just too much for them.  This is another great scenarios for SaaS to meet the business needs of the customer, removing the strain on their IT department, and increasing revenue for you (SaaS Vendor).
  4. SaaS Everything – There is a growing trend for many organizations to outsource more and more of their applications.  Well, that’s what the industry says at least.  For those businesses, you at least need to have SaaS as a delivery option for them or you may lose some business.

There are a number of Service Providers out there today that are offering hosted solutions for Microsoft Exchange Server (for consumer and business mail), Windows Server (for web hosting with Internet Information Server which is part of Windows Server), SQL Server (for databases), and SharePoint Services (for document and information collaboration).  MSCRM4 is a natural extension for Service Providers to also offer this service.  While there is much competition in the space of CRM systems on the Internet, including the current leader, MSCRM4 is easily configurable, extensible, and leverages the Microsoft .NET Framework which will enable the army of Microsoft developers hooked on their Microsoft Visual Studio development environment to build rich business applications.

When developing software, the sky is the limit!  Especially when developing on the Microsoft platform and technologies, but you must be careful that you follow some basic guidelines to ensure your application can be hosted as a SaaS application and meet your target business objectives.  There is much to consider and I hope you find the rest of this series helpful.

Note: If there are specific areas you’d like me to cover in future posts, please post a comment below.

Categories: Cloud, CRM

My first book: How to Cheat at IIS 7 Server Administration

April 16, 2007 Leave a comment

I was fortunate enough to be asked to contribute to a new book focused on IIS 7.0.  I thought this would be a great way to dive deep into the product which would in turn help me sell the platform as Windows Server 2008 comes out (although the book focuses on Windows Vista).  The final name of the book is “How to Cheat at IIS 7 Server Administration“.  The target audience for this book is the IT generalist that is looking to quickly learn IIS 7 and perform the standard operational and support function.  This was my first time contributing to a book and it was quite the effort.  It took up many nights and weekends, plus I had a two week deadline (that was rough).  I may contribute again in the future, but I’ll have a better idea of what I’m getting into and plan accordingly (with my family that is).

Chris Adams was the Technical Editor and I was one of the contributing authors and I produced Chapter 6: Troubleshooting 101.  Although I’m not listed as an official author, my name is printed on the cover of the book and I’m listed as a contributor within the book as well.

  • Paperback: 384 pages
  • Publisher: Syngress (May 28, 2007)
  • Language: English
  • ISBN-10: 1597491551
  • ISBN-13: 978-1597491556
  • Product Dimensions: 9 x 7.4 x 1.2 inches

Here is a blog post by Chris Adams as he gives a brief overview of the book:

Get your copy today!


Categories: Uncategorized

Copy/Increase a VHD using VHDMount

January 4, 2007 Leave a comment

So after my first post on the subject of “expanding a VHD” by actually copying the contents of a VHD image using WAIK (Copy a Microsoft Virtual Machine VHD/Increase VHD size using Windows Automated Installation Kit), I got some good feedback on my laziness of not going down the VHDMount method. So I took a bit of time tonight to work through that scenario.

A key new feature in Service Pack 1 for Microsoft Virtual Server 2005 R2 is the availability of a new tool named, “Offline VHD Mounting”. It’s a command-line utility that allows you to mount a Virtual Hard Drive (VHD) as a local drive on a host server. The great advantage to doing it this way versus using an imaging technology (like I did using ImageX.exe as part of the WAIK), is that you don’t need the overhead of taking a snapshot, deploying, rebooting, etc. You simply need to mount the original image, mount the new image, and then do a copy.

Before we get started, please make sure that you have downloaded and installed the following

So here are the steps I took to “expand a VHD” by coping the contents from the original to a new VHD that was created at a much larger maximum size.

  1. Ensure the Virtual Machine (VM) that holds the original VHD is currently stopped.
  2. Mount the original image
    1. Open a Command Prompt and change directories

      cd “C:\Program Files\Microsoft Virtual Server\Vhdmount\”

    2. Mount the original image (the path I have below reflects my deployment.

      vhdmount.exe /m F:\Images\Configs\DepA-Web02\DepA-Web02.vhd V

  3. Create a new VHD – Using the Virtual Server Administration Website, create a new Virtual Hard Drive (VHD) that has the new storage capacity that you feel you’ll need.
    1. Click Start > All Programs > Microsoft Virtual Server > Virtual Server Administration Website
    2. From the Virtual Disks menu, select “Dynamically Expanding Virtual Hard Disk” or “Fixed Sized Virtual Hard Disk
    3. Provide the new hard drive name and location. You may also notice that the default size for a VHD is no longer 16 GB, but is now 127 GB.
    4. Click the Create button
  4. Mount the new VHD (same steps as step #2, but you need to point to the new VHD location)
  5. Once the new VHD is mounted, I wasn’t able to actually see it using File Explorer. As any new drive, virtual or physical, it has yet to be partitioned and formatted. So the next step is to create a partition and format the new VHD. This (as is everything else) is done on the host machine. There are two ways that we can perform this task: The GUI way using the “Disk Management” MMC Snap-in or the command-line way using the “DiskPart” utility. Below are the steps using DiskPart
    1. Open a Command Prompt and execute:


    2. Find the disk number for the new image. It should have a “Size” and “Free” value that are the same number AND should be the size of the VHD that you created.

      list disk

    3. Now we’ll create the partition on the drive (the disk number for my new VHD was 4, but you should use the number that you found from the above command) and assign it a drive letter

      select disk 4


      create partition primary

      assign letter=w


    4. The next step is to format the new drive

      format w: /FS:NTFS /Q

    5. Finally, we’ll go back into diskpart and activate the partition


      select disk 4

      select partition 1



  6. At this point, we now have a VHD drive ready to be used. So now we’ll simply start copying all of the contents from the original image to the new image. (This will take a while…)
    1. Using the default xcopy command within Windows, we’ll copy all of the contents

      xcopy v:\ w:\ /E/H/K/O

  7. Once the copying is complete, we should now unmount the drives
    1. Open a Command Prompt and change directories

      cd “C:\Program Files\Microsoft Virtual Server\Vhdmount\”

    2. Mount the original image

      vhdmount.exe /u v

      vhdmount.exe /u w

  8. We’re now ready to point the target Virtual Machine from the original VHD to the new VHD.
    1. Click Start > All Programs > Microsoft Virtual Server > Virtual Server Administration Website
    2. From the “Virtual Machines” menu on the left side, hover over the “Configure” section and then click on the target Virtual Machine from the pop out window.
    3. Click on the “Hard Disks” configuration section link
    4. We don’t “really” need to remove and add a new hard drive. What we’ll do instead is point the old path to the new path in the “Fully qualified path to file” section for the appropriate disk. Then click OK.
  9. We’re all done! Now you can start up you VM and it should now be using your new VHD, but with the previous (and I’m sure lots of time invested in created) content. But don’t delete you VHD just yet. I’d give it a few days or hours of testing before you delete the original VHD to save space.

I’m sure most of this could be scripted out and perhaps that’s another late night project for me. But for now, this should at least get you going down a path that worked for me.


I thought some of you might find the before and after file sizes interesting:

  • Original VHD: 15 GB
  • WIM of original VHD: 5.58 GB
  • VHD using WAIK: 12.5 GB
  • VHD using VHDMount: 13.3 GB
Categories: Uncategorized

Copy a Microsoft Virtual Machine VHD/Increase VHD size using Windows Automated Installation Kit

January 3, 2007 Leave a comment

I have a standard set of Virtual Machines images that I do much of my development with. For the most part, I created the virtual machines and their associated virtual drives using the default settings. As I’m using Microsoft Virtual Server 2005 R2 (x86), the default size for a new virtual drive is 16 GB (this changes with Service Pack 1 to 126 GB). This has been plenty of space and all things have ran well, until I started to install the Microsoft .NET Framework 3.0, Visual Studio 2005 Extensions for Windows Workflow Foundation, Vista and .NET 3.0 SDK, Visual Studio 2005 Extensions for .NET 3.0, and much more. I didn’t run all the way out of space, but I was getting close. So I needed to expand my virtual hard drive.

At the moment, there isn’t a feature in Microsoft Virtual Server 2005 R2 (not even with the Service Pack 1 beta) to expand the size of a virtual hard drive. So begins the challenge…

Since I couldn’t make a modification to the original virtual hard drive (VHD) in order to increase the amount of space, I would need a way to copy the contents of the original VHD and store that data on a new VHD. There were two options that I looked into. The first was to leverage the new feature available in Microsoft Virtual Server 2005 R2 Service Pack 1( named, “Offline VHD Mounting”. This enables me to mount a VHD drive as a local drive on my workstation and access it like a physical drive. So in theory, I could simply copy and paste the content. I tried this out with not much success. The issue I ran into was trying to mount to a newly created VHD. To be fair, I didn’t spend much time working through this issue as I quickly dove into my second option.

The next approach was to leverage the newly released Windows Automated Installation Kit:

The Windows Automated Installation Kit (WAIK) is a deployment and imaging technology the enables IT administrators to take snapshots of a base image, deploy the image, and even directly edit the image while in its compressed form. There ton’s of cool stuff in there and I encourage you to read the following article to learn more:

There are many advantages to leveraging WAIK to solve this problem:

  1. It’s a freely available download from Microsoft and fully supported
  2. It’s a core deployment technology for Windows Vista and soon Windows “Longhorn” server
  3. Windows XP and Windows Server 2003 are supported clients for deployment

Another very interesting component of WAIK is the WindowsPE component. WindowsPE enables you to create a bootable CD the provides support for network connections, manage the disk partitions, and (of course) kick off a capture or attach (aka deploy) an image. Here’s a great article to learn more:

Before you get started, make sure you download and install the following software components:

OK, so let’s get down to how I used WAIK to create a copy of a VHD with an increased disk size. In the steps provided below, I provide the steps I took and the command line arguments that I used. This doesn’t mean that this is the only way it can be done, but points out what I used to get the results I was looking for and that matched my configuration/environment. Also, many of the WAIK steps noted below can be found in the “Getting_Started_ITPro.rtf” document provided as part of the WAIK.

  1. Make a WinPE Image

    cd Program Files\Windows AIK\Tools\PETools\

    copype.cmd x86 c:\winpe_x86

    copy “c:\program files\Windows AIK\Tools\x86\imagex.exe” c:\winpe_x86\iso\

    Oscdimg -n c:\winpe_x86\ISO c:\winpe_x86\winpe_x86.iso -n -bc:\winpe_x86\

  2. Using Virtual Server Manager, map the WinPE ISO to the target Virtual Machine
  3. On your workstation (or other server on the network), create a new folder share. We’ll use this as the location to store our WIM file which will be an image of our VHD.
    1. Name: wim
    2. Share Permissions and folder permissions set to allow for rights
  4. Boot the Virtual Machine (WinPE will then start)
  5. From within the WinPE command line environment (running inside of the target VM)-Create a connection to the share

    net use z: \\computername\wim /user:computername\username

  6. Capture the image.
    1. Change to the “d:” drive
    2. Capture the image

    imagex.exe /compress fast /capture c:\ z:\myimage.wim “my image” /verify

  7. Using Virtual Server Manager, create a new VHD. Don’t forget to change the default size of the VHD.
  8. Using Virtual Server Manager, edit the configuration of the target virtual machine. Within the “Hard Disks” settings, remove the original drive and assign the new VHD. Save the changes.
  9. Boot the Virtual Machine (WinPE will then start)
  10. Partition and format the new VHD


    select disk 0


    create partition primary

    select partition 1




  11. Map a drive to the share where we stored the captured image

    net use z: \\computername\wim /user:computername\username

  12. Apply the image previously captured to the new VHD

    imagex.exe /apply z:\myimage.wim 1 c:

  13. Remove WinPE ISO from VM
  14. Restart VM

At this point, you should be all set. What you’ll now have on your local hard drive is your original VHD (not assigned to an Virtual Machine), a WIM file which is a snapshot of your original VHD, and a new VHD (larger in size) with the content from the Original VHD.

I’ve had this up and running for a few days now without any issues. I hope this helps and I plan on doing some more posts on this subject as I start to use it more

Categories: Uncategorized

New Pics

July 21, 2005 Leave a comment
I added some recent Family photos we took at a studio and some pictures of the kids in the Photos section.
Categories: Uncategorized