Code Bye

C++程序怎么样检测C#运行环境问题

各位大虾们,本人想写个C++的程序可以检测出本地机器能否安装.net以及版本能否在2.0以上,本人初步的目标是这样的:用一个C++的程序调用一个C#的控制台程序,控制台返回一个特定的数值或字符串,假如返回成功则说明C#在本机可以运行。
问一下代码本人该怎么写呢?有什么API可以用吗?
解决方案:40分
用这个函数吧,要是能运行C#的方法说明有安装,
extern "C" BOOL __stdcall CallManaged(PCWSTR pszVersion, PCWSTR pszAssemblyPath, PCWSTR pszClassName, PCWSTR pszMethodName, PCWSTR argument)
{
	ICLRMetaHost        *pMetaHost = nullptr;
	ICLRMetaHostPolicy  *pMetaHostPolicy = nullptr;
	ICLRRuntimeHost     *pRuntimeHost = nullptr;
	ICLRRuntimeInfo     *pRuntimeInfo = nullptr;
	HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost);
	hr = pMetaHost->GetRuntime(pszVersion, IID_PPV_ARGS(&pRuntimeInfo));
	if (FAILED(hr))
	{
		goto cleanup;
	}
	hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pRuntimeHost));
	hr = pRuntimeHost->Start();
	DWORD dwRet = 0;
	hr = pRuntimeHost->ExecuteInDefaultAppDomain(pszAssemblyPath,
		pszClassName,
		pszMethodName,
		argument,
		&dwRet);
	//hr = pRuntimeHost->Stop();
cleanup:
	if (pRuntimeInfo != nullptr)
	{
		pRuntimeInfo->Release();
		pRuntimeInfo = nullptr;
	}
	if (pRuntimeHost != nullptr)
	{
		pRuntimeHost->Release();
		pRuntimeHost = nullptr;
	}
	if (pMetaHost != nullptr)
	{
		pMetaHost->Release();
		pMetaHost = nullptr;
	}
	return 1;
}

第一个参数NET版本,第二个就是C#的DLL路径,第三个就是这个DLL下的某个类,第四个就是这个类的静太方法,第五个就是参数了。
RunManaged(L”v4.0.30319″, hookDLLPath, L”NetHook.InjectionLoader”, L”ExecuteAssembly”, pc);
public static int ExecuteAssembly(string pwzArgument)
{
return 1;
}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++程序怎么样检测C#运行环境问题