Статьи

Проверка распространяемых файлов Visual C ++ в пользовательских приложениях .NET

Эта статья была написана командой Imaginovation . Это компания Raleigh по веб-дизайну и разработке программного обеспечения, которая использует технологии .NET, PHP, HTML5, JavaScript и jQuery.

Как вы, возможно, уже знаете, распространяемые файлы MS VC ++ позволяют запускать программы, которые были разработаны с конкретными версиями Visual Studio. Может возникнуть необходимость проверить клиентскую систему на наличие этих файлов в сценарии, в котором вы развертываете свое приложение и хотите развернуть видеомагнитофон, если в системе пользователя они не установлены, что экономит время и накладные расходы.

Сначала давайте
пройдемся по очень сложному и запутанному соглашению об именах: VCR7 (который мы не будем обсуждать, как обнаруживать в этой статье) соответствует Visual Studio 2003

VCR8 соответствует Visual Studio 2005

VCR9 соответствует Visual Studio 2008

VCR10 соответствует Visual Studio 2010

 
Затем мы обнаружим наличие этих видеомагнитофонов и добавим их в список строк, используя следующий фрагмент кода:
сначала определен тип перечисления:
public enum INSTALLSTATE

        {

           INSTALLSTATE_NOTUSED = -7,  // component disabled

           INSTALLSTATE_BADCONFIG = -6,  // configuration data corrupt

           INSTALLSTATE_INCOMPLETE = -5,  // installation suspended or in progress

           INSTALLSTATE_SOURCEABSENT = -4,  // run from source, source is unavailable

           INSTALLSTATE_MOREDATA = -3,  // return buffer overflow

           INSTALLSTATE_INVALIDARG = -2,  // invalid function argument

           INSTALLSTATE_UNKNOWN = -1,  // unrecognized product or 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 action state absent but clients remain)

           INSTALLSTATE_LOCAL = 3,  // installed on local drive

           INSTALLSTATE_SOURCE = 4,  // run from source, CD or net

           INSTALLSTATE_DEFAULT = 5,  // use default, local or source

        }


/ * Используйте эту функцию, чтобы определить, какой битовый тип видеомагнитофона установлен.
Приведенная ниже логика в основном говорит о том, что если вы можете открыть ключ, то он существует (вы можете передать только определенные состояния в зависимости от ваших потребностей. Чаще всего я использую «хорошие состояния» — «Локальный» и «По умолчанию», вам может потребоваться передать все состояния. в целях отладки.

* /

        private void CheckVCKey(string _vcKey, string _state)

        {

            string value64 = string.Empty;

            string value32 = string.Empty;

 

            if (Environment.Is64BitOperatingSystem == true)

            {

 

                RegistryKey localKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);

                localKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + _vcKey);

 

                if (localKey != null)

                {

                    value64 = localKey.GetValue("DisplayName").ToString() + " at Registry Key " + _vcKey + " with a state of " + _state;

                    VCresults.Add(value64);

                }

            }

           

            RegistryKey localKey32 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);

 

            localKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + _vcKey);

            if (localKey32 != null)

            {

                value32 = localKey32.GetValue("DisplayName").ToString() + " at Registry Key " + _vcKey + " with a state of " + _state; ;

                VCresults.Add(value32);

            }

 
public bool IsVCRedistInstalled()

{           


       string [,] strCodes = new string [,] (это самая важная (и раздражающая) часть этого документа, и этот список строк будет определен ниже фрагмента кода)

INSTALLSTATE state;

 

for (int i = 0;i < strCodes.Length; i++){

                //you can modify this as needed with any of the enumerated types

if (state == INSTALLSTATE.INSTALLSTATE_LOCAL||

                     state == INSTALLSTATE.INSTALLSTATE_DEFAULT)

                {

                   CheckVCKey(strCodes[i], state.ToString());

       }

}

Теперь мы перечислим коды (имейте в виду, что это постоянно меняющийся список, и я постараюсь обновлять его как можно больше):

string[,] strCodes = new string[,]
           {

 

                //VC8

                //vcredist_x86 - ProductCode

                {"{710f4c1c-cc18-4c49-8cbf-51240c89a1a2}"},   //8.0.61001  - distributed in 152

                {"{A49F249F-0C91-497F-86DF-B2585E8E76B7}"},

                {"{7299052B-02A4-4627-81F2-1818DA5D550D}"},

                {"{837B34E3-7C30-493C-8F6A-2B0F04E2912C}"},

 

                //vcredist_x64 - ProductCode

                {"{6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}"},

                {"{071C9B48-7C32-4621-A0AC-3F809523288F}"},

                {"{6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}"},

                {"{AD8A2FA1-06E7-4B0D-927D-6E54B3D31028}"},

 

                //vcredist_IA64 - ProductCode

                {"{C2F60BDA-462A-4A72-8E4D-CA431A56E9EA}"},

                {"{03ED71EA-F531-4927-AABD-1C31BCE8E187}"},

                {"{0F8FB34E-675E-42ED-850B-29D98C2ECE08}"},

                {"{85025851-A784-46D8-950D-05CB3CA43A13}"},

               

                //VC9

                //vcredist_x86 - ProductCode

                {"{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}"},

                {"{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}"},

                {"{9BE518E6-ECC6-35A9-88E4-87755C07200F}"},

                {"{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

                {"{350AA351-21FA-3270-8B7A-835434E766AD}"},

                {"{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}"},

                {"{5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}"},

                {"{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

                {"{2B547B43-DB50-3139-9EBE-37D419E0F5FA}"},

                {"{977AD349-C2A8-39DD-9273-285C08987C7B}"},

                {"{515643D1-4E9E-342F-A75A-D1F16448DC04}"},

                {"{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}"},

 

                //vc10_x86 - ProductCode

                {"{196BB40D-1578-3D01-B289-BEFC77A11A1E}"},

 {"{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}"},

               

                 //vc10_x64 - ProductCode

               {"{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}"},

                {"{1D8E6291-B0D5-35EC-8441-6616F567A0F7}"},

               

 

 



//vc10_x86 - ProductCode

                {"{94D70749-4281-39AC-AD90-B56A0E0A402E}"},

 {"{88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}"},

{"{C1A35166-4301-38E9-BA67-02823AD72A1B}"},

               

 

            };

 
Я надеюсь, что эта статья поможет тем, кто нуждается в обнаружении видеомагнитофона, и вам было так же интересно читать ее, как и я!