TL;博士; 如何从 C++ 应用程序创建沙盒化 AppDomain(配置 CAS)?
长版:
我在 C++ 应用程序中托管 .NET CLR,一切正常……但是,我的 AppDomain 完全信任,我希望对它可以做的事情有更精细的控制(即配置 PermissionSets 等.) 因为我将加载可能导致损坏的未知程序集。
这是它的要点:
// Create instance (CLRCreateInstance)
// Get meta-host, CorRuntimeHost, etc.
// Start the CLR
// ...
最终,我拥有了创建 AppDomain 所需的一切(请假装我实际上正在处理异常,测试来自每个调用的 HRESULT,等等......):
pCorRuntimeHost->CreateDomainSetup(&spAppDomainSetupThunk);
spAppDomainSetupThunk->QueryInterface(IID_PPV_ARGS(&spAppDomainSetup));
spAppDomainSetup->put_ApplicationBase(_bstr_t(L"C:\\PretendThisIsNotHardCoded"));
spAppDomainSetup->put_ApplicationName(appDomainName);
pCorRuntimeHost->CreateDomainEx(appDomainName, spAppDomainSetupThunk, 0, &spAppDomainThunk);
spAppDomainThunk->QueryInterface(IID_PPV_ARGS(&spAppDomain));
// AppDomain ready to go, and full trust (at least on .NET 4)
任何想法或代码示例表示赞赏。