当前位置: 代码迷 >> C# >> C++程序怎么检测C#运行环境有关问题
  详细解决方案

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

热度:368   发布时间:2016-04-28 08:34:15.0
C++程序如何检测C#运行环境问题
各位大虾们,我想写个C++的程序可以检测出本地机器是否安装.net以及版本是否在2.0以上,我初步的目标是这样的:用一个C++的程序调用一个C#的控制台程序,控制台返回一个特定的数值或者字符串,如果返回成功则说明C#在本机可以运行。
请问代码我该怎么写呢?有什么API可以用吗?
------解决思路----------------------

用这个函数吧,要是能运行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;
}
  相关解决方案