2011-11-12 3 views
1

제어판의 프로그램 추가/제거 목록에있는 목록과 비슷한 설치된 응용 프로그램 목록을 작성하려고합니다.
Win32_Product WMI ClassMsiEnumProducts을 사용해 보았습니다. 두 프로그램 모두 매우 유사한 출력을 출력했지만 두 프로그램 모두 프로그램 추가/제거에 있습니다. 예를 들어, 내가 Adobe Flash Player을 설치했음을 알고 있지만,이 목록에는 없었습니다.설치된 응용 프로그램 목록 가져 오기

저는 레지스트리를 읽는 것을 피하려고했습니다. 목록을 검색하기 위해 일부 API를 사용하는 것이 더 낫지 만 지금까지 발견 된 방법은 없습니다.

작동 가능한 다른 내장 API/COM 메소드가 있습니까? 아니면 레지스트리에서 모든 것을 읽으려고합니까?

또한
레지스트리에 프로그램 추가/제거 목록에없는 프로그램이 있습니다 (예 : Microsoft Security Essentials). 레지스트리에는 이 따로 있지만 프로그램 추가/제거 목록에없는 것으로 가정하고 Microsoft Antimalware을 제거하는 항목이 있으며 어떤 종류의 표시 안 함 값도 표시되지 않습니다. (내가 어떤 종류의 API를 사용하고자하는 이유 중 일부)

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/aa372105(v=vs.85).aspx를 보셨습니까? – IronMensan

답변

0

수치는 SystemComponent 값으로 프로그램 추가/제거 목록에서이를 숨 깁니다.
다른 API를 사용할 수 없으므로 레지스트리를 열거합니다.

2

"프로그램 및 기능"목록에서와 동일한 항목을 표시하려면 해당 폴더에 바인딩하고 해당 내용을 요청하면됩니다. 여기에 스크립트 버전은 다음과 같습니다

var shell = new ActiveXObject("Shell.Application"); 
var programsFolder = shell.Namespace("::{26EE0668-A00A-44D7-9371-BEB064C98683}\\0\\::{7b81be6a-ce2b-4676-a29e-eb907a5126c5}"); 
var items = programsFolder.Items(); 
for (var i = 0; i < items.Count; i++) { 
var item = items.Item(i); 
WScript.StdOut.WriteLine(item); 
} 

이의 C++ 버전은 더 많은 입력을 포함하지만 아이디어는 동일합니다.

관련 문제