MsiQueryProductState

来源:互联网 发布:兼职 大数据 英文 翻译 编辑:程序博客网 时间:2024/04/30 09:41
说明:
查询MS产品的安装状态
语法:
INSTALLSTATE MsiQueryProductState(  _In_  LPCTSTR szProduct );

product codes:

Visual C++ 2005 runtime files

  • Visual C++ 2005 Redistributable Package (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
  • Visual C++ 2005 Redistributable Package (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
  • Visual C++ 2005 Redistributable Package (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}

Visual C++ 2005 SP1 runtime files

  • Visual C++ 2005 SP1 Redistributable Package (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
  • Visual C++ 2005 SP1 Redistributable Package (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
  • Visual C++ 2005 SP1 Redistributable Package (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}

Visual C++ 2005 SP1 ATL Security Update runtime files

  • Visual C++ 2005 SP1 ATL Security Update Redistributable Package (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
  • Visual C++ 2005 SP1 ATL Security Update Redistributable Package (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
  • Visual C++ 2005 SP1 ATL Security Update Redistributable Package (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}

Visual C++ 2005 SP1 MFC Security Update runtime files

  • Visual C++ 2005 SP1 MFC Security Update Redistributable Package (x86) - {710F4C1C-CC18-4C49-8CBF-51240C89A1A2}
  • Visual C++ 2005 SP1 MFC Security Update Redistributable Package (x64)  - {AD8A2FA1-06E7-4B0D-927D-6E54B3D31028}
  • Visual C++ 2005 SP1 MFC Security Update Redistributable Package (ia64) - {C2F60BDA-462A-4A72-8E4D-CA431A56E9EA}

Visual C++ 2008 runtime files

  • Visual C++ 2008 Redistributable Package (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
  • Visual C++ 2008 Redistributable Package (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
  • Visual C++ 2008 Redistributable Package (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA}

Visual C++ 2008 SP1 runtime files

  • Visual C++ 2008 SP1 Redistributable Package (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
  • Visual C++ 2008 SP1 Redistributable Package (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
  • Visual C++ 2008 SP1 Redistributable Package (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}

Visual C++ 2008 SP1 ATL Security Update runtime files

  • Visual C++ 2008 SP1 ATL Security Update Redistributable Package (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
  • Visual C++ 2008 SP1 ATL Security Update Redistributable Package (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
  • Visual C++ 2008 SP1 ATL Security Update Redistributable Package (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

Visual C++ 2008 SP1 MFC Security Update runtime files

  • Visual C++ 2008 SP1 MFC Security Update Redistributable Package (x86) - {9BE518E6-ECC6-35A9-88E4-87755C07200F}
  • Visual C++ 2008 SP1 MFC Security Update Redistributable Package (x64) - {5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}
  • Visual C++ 2008 SP1 MFC Security Update Redistributable Package (ia64) - {515643D1-4E9E-342F-A75A-D1F16448DC04}

Visual C++ 2010 redistributable package product codes

  • Visual C++ 2010 Redistributable Package (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
  • Visual C++ 2010 Redistributable Package (x64) - {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
  • Visual C++ 2010 Redistributable Package (ia64) - {C1A35166-4301-38E9-BA67-02823AD72A1B}

Visual C++ 2010 SP1 redistributable package product codes

  • Visual C++ 2010 SP1 Redistributable Package (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  • Visual C++ 2010 SP1 Redistributable Package (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  • Visual C++ 2010 SP1 Redistributable Package (ia64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}
返回值:
安装状态返回整数值含义INSTALLSTATE_INVALIDARG-2无效的参数传递给该函数。INSTALLSTATE_UNKNOWN-1不公布或者未安装该产品。INSTALLSTATE_ADVERTISED1该产品已公布但尚未安装。INSTALLSTATE_ABSENT2不同的用户安装该产品。INSTALLSTATE_DEFAULT5为当前用户安装该产品。

例子:
using System;
using System.Runtime.InteropServices;

public class QueryProductState
{
   [DllImport("msi.dll")]
   private static extern INSTALLSTATE MsiQueryProductState(string product); 

   public static void Main(string[] args)
   {
       INSTALLSTATE state = MsiQueryProductState("{11111111-2222-3333-4444-555555555555}");

       Console.WriteLine(state);
   }
}

其他:

Visual C++ 2010 redistributable package detection registry values

  • Visual C++ 2010 Redistributable Package (x86) 

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86] 
    Installed = 1 (REG_DWORD)

  • Visual C++ 2010 Redistributable Package (x64) 

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x64] 
    Installed = 1 (REG_DWORD)

  • Visual C++ 2010 Redistributable Package (ia64) 

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\ia64] 
    Installed = 1 (REG_DWORD)

替代用的批处理:
@echo off
set "HKLMU=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
::::: 判断系统是否已经安装了 Visual C++ 2005 (包括所有版本) bbs.bathome.net By:FastSLZ
::::: 代码能实现判断X86、X64、IA64各版本的Visual C++ 2005,正确率99%除非微软发布新版本Visual C++ 2005
::::: 有就跳过安装Visual C++ 2005,没有则先安装。
reg query %HKLMU%\{A49F249F-0C91-497F-86DF-B2585E8E76B7}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 Redistributable X86
reg query %HKLMU%\{7299052B-02A4-4627-81F2-1818DA5D550D}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 SP1 Redistributable X86
reg query %HKLMU%\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update X86
reg query %HKLMU%\{6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 Redistributable X64
reg query %HKLMU%\{071C9B48-7C32-4621-A0AC-3F809523288F}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 SP1 Redistributable X64
reg query %HKLMU%\{6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update X64
reg query %HKLMU%\{03ED71EA-F531-4927-AABD-1C31BCE8E187}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 Redistributable IA64
reg query %HKLMU%\{0F8FB34E-675E-42ED-850B-29D98C2ECE08}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 SP1 Redistributable IA64
reg query %HKLMU%\{85025851-A784-46D8-950D-05CB3CA43A13}>nul 2>nul&&set VC2005=Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update IA64
if defined VC2005 (echo %VC2005% 已安装!&ping -n 3 127.1>nul) else (goto 2005Install)
:::::这里你要做的事
goto:eof
:2005Install
:::::这里还可以精确判断何种版本的Visual C++ 2005,该不该更新到最新的。
:::::最新的Visual C++ 2008是Microsoft Visual C++ 2005 SP1 Redistributable ATL Security Update ***
:::::各版本下载地址 http://www.microsoft.com/downloads/details.aspx?FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2&DisplayLang=zh-cn
echo 正在安装 Microsoft Visual C++ 2005 Redistributable
vcredist_x86.exe /q
goto:eof


@echo off
set "HKLMU=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
::::: 判断系统是否已经安装了 Visual C++ 2008 (包括所有版本) bbs.bathome.net By:FastSLZ
::::: 代码能实现判断X86、X64、IA64各版本的Visual C++ 2008,正确率99%除非微软发布新版本Visual C++ 2008
::::: 有就跳过安装Visual C++ 2008,没有则先安装。
reg query %HKLMU%\{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 Redistributable X86
reg query %HKLMU%\{9A25302D-30C0-39D9-BD6F-21E6EC160475}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 SP1 Redistributable X86
reg query %HKLMU%\{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update X86
reg query %HKLMU%\{350AA351-21FA-3270-8B7A-835434E766AD}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 Redistributable X64
reg query %HKLMU%\{8220EEFE-38CD-377E-8595-13398D740ACE}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 SP1 Redistributable X64
reg query %HKLMU%\{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update X64
reg query %HKLMU%\{2B547B43-DB50-3139-9EBE-37D419E0F5FA}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 Redistributable IA64
reg query %HKLMU%\{5827ECE1-AEB0-328E-B813-6FC68622C1F9}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 SP1 Redistributable IA64
reg query %HKLMU%\{977AD349-C2A8-39DD-9273-285C08987C7B}>nul 2>nul&&set VC2008=Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update IA64
if defined VC2008 (echo %VC2008% 已安装!&ping -n 3 127.1>nul) else (goto 2008Install)
:::::这里你要做的事
goto:eof
:2008Install
:::::这里还可以精确判断何种版本的Visual C++ 2008,该不该更新到最新的。
:::::最新的Visual C++ 2008是Microsoft Visual C++ 2008 SP1 Redistributable ATL Security Update ***
:::::各版本下载地址 http://www.microsoft.com/downloads/details.aspx?FamilyID=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&DisplayLang=zh-cn
echo 正在安装 Microsoft Visual C++ 2008 Redistributable
vcredist_2008_x86.exe /q
goto:eof

参考资料:
http://msdn.microsoft.com/en-gb/library/aa370363.aspx
http://www.pinvoke.net/default.aspx/msi/MsiQueryProductState.html
http://blogs.msdn.com/b/astebner/archive/2007/01/24/updated-vc-8-0-runtime-redistributable-packages-are-included-in-visual-studio-2005-sp1.aspx
http://blogs.msdn.com/b/astebner/archive/2009/01/29/9384143.aspx
http://blogs.msdn.com/b/astebner/archive/2010/05/05/10008146.aspx
http://www.bathome.net/viewthread.php?tid=7298
原创粉丝点击