50% OFF!!!

Sunday, November 28, 2010

c# | Check if VcRedist installed (x86/x64/IA64)

The following code checks if vcredist (Microsoft Visual C++ 2008 SP1 Redistributable Package) is installed.
This check is used when we want to assure that the Visual C++ 2008 SP1 is INSTALLED perior to the application launch.

The code is using the MsiQueryProductState function from the msi.dll.

We check the product codes of vcredist_x86, vcredist_x64 and vcredist_IA64 using MsiQueryProductState to validate if the product is installed or not!
(vcredist product codes are listed HERE)

The Code:
public enum INSTALLSTATE
{
   INSTALLSTATE_NOTUSED = -7,  // component disabled
   INSTALLSTATE_BADCONFIG = -6,  // configuration datacorrupt
   INSTALLSTATE_INCOMPLETE = -5,  // installationsuspended or in progress
   INSTALLSTATE_SOURCEABSENT = -4,  // run from source,source is unavailable
   INSTALLSTATE_MOREDATA = -3,  // return bufferoverflow
   INSTALLSTATE_INVALIDARG = -2,  // invalid functionargument
   INSTALLSTATE_UNKNOWN = -1,  // unrecognized productor feature
   INSTALLSTATE_BROKEN = 0,  // broken
   INSTALLSTATE_ADVERTISED = 1,  // advertised feature
   INSTALLSTATE_REMOVED = 1,  // component being removed(action state, not settable)
   INSTALLSTATE_ABSENT = 2,  // uninstalled (or actionstate absent but clients remain)
   INSTALLSTATE_LOCAL = 3,  // installed on local drive
   INSTALLSTATE_SOURCE = 4,  // run from source, CD ornet
   INSTALLSTATE_DEFAULT = 5,  // use default, local orsource
}
 
[DllImport("msi.dll")]
private static extern INSTALLSTATE MsiQueryProductState(string product);
 
public static boolIsVCRedistInstalled()
{
   string[] strCodes = newstring[]
   {
       //vcredist_x86 - ProductCode
       "{9A25302D-30C0-39D9-BD6F-21E6EC160475}",
       "{86CE1746-9EFF-3C9C-8755-81EA8903AC34}",
       "{CA8A885F-E95B-3FC6-BB91-F4D9377C7686}",
       "{820B6609-4C97-3A2B-B644-573B06A0F0CC}",
       "{6AFCA4E1-9B78-3640-8F72-A7BF33448200}",
       "{F03CB3EF-DC16-35CE-B3C1-C68EA09E5E97}",
       "{402ED4A1-8F5B-387A-8688-997ABF58B8F2}",
       "{887868A2-D6DE-3255-AA92-AA0B5A59B874}",
       "{527BBE2F-1FED-3D8B-91CB-4DB0F838E69E}",
       "{57660847-B1F7-35BD-9118-F62EB863A598}",
 
       //vcredist_x64 - ProductCode
       "{8220EEFE-38CD-377E-8595-13398D740ACE}",
       "{56F27690-F6EA-3356-980A-02BA379506EE}",
       "{14297226-E0A0-3781-8911-E9D529552663}",
       "{9B3F0A88-790D-3AD9-9F96-B19CF2746452}",
       "{D285FC5F-3021-32E9-9C59-24CA325BDC5C}",
       "{092EE08C-60DE-3FE6-B113-90076EC06D0D}",
       "{A96702F7-EFC8-3EED-BE46-22C809D4EBE5}",
       "{92B8FD1F-C1AE-3750-8577-631B0AA85DF5}",
       "{2DFD8316-9EF1-3210-908C-4CB61961C1AC}",
       "{E34002C7-8CE7-3F76-B36C-09FA973BC4F6}",
 
       //vcredist_IA64 - ProductCode
       "{5827ECE1-AEB0-328E-B813-6FC68622C1F9}",
       "{9363B366-8370-34F7-8164-25052EBF35FD}",
       "{4EC84186-70BB-3121-9C1B-C63512D7126E}",
       "{1F7B9797-A3C8-3B98-85C4-00620F221CE8}",
       "{6BE0A7C7-3462-30EE-8B77-D21D7848D967}",
       "{BF58DC07-38AB-3887-8000-70173F9650EA}",
       "{D289009A-2728-3D0A-833E-F08E0E58934C}",
       "{9476DC14-00C3-3C36-A435-00D714CF77B8}",
       "{678835D7-D524-3C0E-9C33-1D3767FDA6BF}"
   };
 
   INSTALLSTATE state;
   for (int i = 0;i < strCodes.Length; i++)
   {
       state = MsiQueryProductState(strCodes[i]);
       if (state == INSTALLSTATE.INSTALLSTATE_LOCAL||
           state == INSTALLSTATE.INSTALLSTATE_DEFAULT)
       {
           return true;
       }
   }
 
   return false;
}

You may also extent and improve this method to check only those Product Codes that matching current architecture (x86/x64/IA64).

Hope it helps,
MDB-Blog

9 comments:

  1. Mdb Blog: C >>>>> Download Now

    >>>>> Download Full

    Mdb Blog: C >>>>> Download LINK

    >>>>> Download Now

    Mdb Blog: C >>>>> Download Full

    >>>>> Download LINK 6v

    ReplyDelete
  2. Thanks for sharing an article like this. The information which you have provided is better than another blog. Great work.

    Android apps development company in Noida

    ReplyDelete
  3. I like this post, And I guess that they having fun to read this post, they shall take a good site to make a information, thanks for sharing it to me.

    Emergency Dentist Services Timonium

    ReplyDelete
  4. Thanks for sharing an article like this. The information which you have provided is better than another blog.

    Freelance mobile app developer

    ReplyDelete
  5. Thanks for provide great informatic and looking beautiful blog, really nice required information & the things i never imagined and i would request, wright more blog and blog post like that for us. Thanks you once agian

    Warehousing Services in India

    ReplyDelete
  6. Thanks for sharing The Awesome content. I will also share with my friends. Great Content thanks a lot.

    Web and app development services

    ReplyDelete
  7. Thank you for sharing such a nice article with us I had visited your website first time and got myself fall in love with your content, i have bookmarked your website to visit again ahead

    Personalized gifts dubai

    ReplyDelete
  8. You guys are writing some Amazing tips. This article really helped me a lot. Thanks for sharing this

    AI Voice Generator132wss

    ReplyDelete