我已使用此代码运行预编译的 C# 应用程序:
ICLRMetaHost *p_meta_host = nullptr;
ICLRRuntimeInfo *p_runtime_info = nullptr;
ICLRRuntimeHost *p_clr_runtime_host = nullptr;
CLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&p_meta_host));
p_meta_host->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&p_runtime_info));
p_runtime_info->GetInterface(CLSID_CLRRuntimeHost,
IID_PPV_ARGS(&p_clr_runtime_host));
p_clr_runtime_host->Start();
auto hr = p_clr_runtime_host->ExecuteInDefaultAppDomain(
L"C:\\somefolder\\test.exe",
L"InjectExample.Program",
L"EntryPoint",
L"hey!",
&p_return_value);
执行后hr
不是S_OK
并且GetLastError()
返回ERROR_FILE_NOT_FOUND
关键是文件肯定存在于 'C:\\somefolder\\test.exe'
知道为什么会这样吗?
--UPD。在调试日志中发现:
'NetLoader.exe' (Win32): Loaded 'C:\somefolder\test.exe'.
'NetLoader.exe' (Win32): Loaded 'C:\somefolder\test.exe'.
'NetLoader.exe' (Win32): Unloaded 'C:\somefolder\test.exe'
最佳答案
问题已解决。
显然 hr
等于 COR_E_MISSINGMETHOD
或 0x80131513
这意味着我尝试使用错误的方法。
有关返回码的更多信息,请参见此处:
https://referencesource.microsoft.com/#mscorlib/system/__hresults.cs,c4f0369b78643cb0
关于c# - ICLRRuntimeHost::ExecuteInDefaultAppDomain 无法执行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47620525/