U++ framework
Do not panic. Ask here before giving up.

Home » Community » Coffee corner » What next?
Re: What next? [message #46520 is a reply to message #46517] Thu, 19 May 2016 17:17 Go to previous messageGo to previous message
omari is currently offline  omari
Messages: 276
Registered: March 2010
Experienced Member
Hi,

I think, we can find all MSCxx installation paths, by enumeration of registry subkeys and values.

please, test the function below, and let us know if it success or fail to detect your.

on my win7 64, it show:

SDK found:
C:\Program Files (x86)\Windows Kits\10
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A
C:\Program Files (x86)\Windows Kits\8.0
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A
C:\Program Files (x86)\Windows Kits\8.1
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A
Visual Studio found:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\
C:\Program Files (x86)\Microsoft Visual Studio 12.0\
C:\Program Files (x86)\Microsoft Visual Studio 14.0\



the code:

#include <Core/Core.h>
using namespace Upp;

Vector<String> GetWinRegSubKeys(String reg_path, HKEY base_key = HKEY_LOCAL_MACHINE)
{
	HKEY key = 0;
	DWORD  dwSize = 0;
	DWORD count; // subkeys
	
	Vector<String> v;
	
	if(RegOpenKeyEx(base_key, reg_path, 0, KEY_READ, &key) != ERROR_SUCCESS)
		return v;
	StringBuffer buf(2048);
	
	RegQueryInfoKey(key,NULL,NULL,NULL,&count,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

    for(int i=0; i< count; i++){
        dwSize = 2048;
        RegEnumKeyEx(key,i,buf,&dwSize,NULL,NULL,NULL,NULL);
        v.Add( String(buf.Begin(), dwSize)) ;
    }

    RegCloseKey(key);
    return v;
}

Vector<String> GetWinRegValues(String reg_path, HKEY base_key = HKEY_LOCAL_MACHINE)
{
	HKEY key = 0;
	DWORD  dwSize = 0;
	DWORD count; // subkeys
	
	Vector<String> v;
	
	if(RegOpenKeyEx(base_key, reg_path, 0, KEY_READ, &key) != ERROR_SUCCESS)
		return v;
	StringBuffer buf(2048);
	
	RegQueryInfoKey(key,NULL,NULL,NULL,NULL,NULL,NULL, &count,NULL,NULL,NULL,NULL);

    for(int i=0; i< count; i++){
        dwSize = 2048;
		RegEnumValue(key, i, buf, &dwSize, NULL, NULL, NULL, NULL);
        v.Add( String(buf.Begin(), dwSize)) ;
    }

    RegCloseKey(key);
    return v;
}

String NormalizePathNN(const String& path)
{
	return IsNull(path) ? path : NormalizePath(path);
}

void FindMSC()
{
	Vector<String> v = GetWinRegSubKeys("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows", HKEY_LOCAL_MACHINE);
	
	if(v.GetCount())
		LOG("SDK found:");
	else
		LOG("no SDK found");
	for(int i = 0; i < v.GetCount(); i++)
	{
		LOG(NormalizePathNN(GetWinRegString("InstallationFolder",
		                                       "SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\" + v[i],
		                                       HKEY_LOCAL_MACHINE)));
	}
		
	v = GetWinRegValues("SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7", HKEY_LOCAL_MACHINE);
	
	if(v.GetCount())
		LOG("Visual Studio found:");
	else
		LOG("No Visual Studio found");
	for(int i = 0; i < v.GetCount(); i++)
	{
		LOG(GetWinRegString(v[i], "SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7", HKEY_LOCAL_MACHINE));
	}
}

CONSOLE_APP_MAIN
{
	FindMSC();
}





regards
omari.
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Members of structure are finally accessible through plain index
Next Topic: I've just joined the wonderful world of Linux software distribution!
Goto Forum:
  


Current Time: Fri Jun 19 18:41:18 GMT+2 2026

Total time taken to generate the page: 0.00800 seconds