我试图通过创建新的appdomain来执行下面的代码,但它似乎无法正常工作。 certlm.msc中的新条目未创建。请参考随附的截图。 [CertLM] [1]
如果我使用当前域,那么它会按预期工作。
我正在使用Windows 10.还尝试传递CurrentDomain证据和其他详细信息,但没有运气。新域和当前域的属性对我来说很好。还使用了进程资源管理器,似乎在两种情况下都正确加载了Microsoft.CertificateServices.PKIClient.Cmdlets.dll。
**EXE code:**
class Program
{
static void Main(string[] args)
{
MessageBox.Show("Running powershell script");
InitialSessionState iss = InitialSessionState.CreateDefault();
using (System.Management.Automation.Runspaces.Runspace space = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(iss))
{
space.Open();
using (System.Management.Automation.PowerShell shell = System.Management.Automation.PowerShell.Create())
{
string sScriptContent = "New-SelfSignedCertificate -DnsName localhost -CertStoreLocation \"cert:\\LocalMachine\\My\"";
shell.Runspace = space;
shell.AddScript(sScriptContent, true);
IAsyncResult result = shell.BeginInvoke();
WaitHandle[] wait = { result.AsyncWaitHandle };
WaitHandle.WaitAny(wait);
}
space.Close();
}
}
}
**Sample application that calls above EXE**
public class Class1
{
static void Main(string[] args)
{
/* Not Working.*/
System.AppDomain newDomain = System.AppDomain.CreateDomain("NewApplicationDomain");
newDomain.ExecuteAssembly("PowerShellCertificateTest.exe");
//Unload the application domain:
System.AppDomain.Unload(newDomain);
// Working using current domain...
System.AppDomain.CurrentDomain.ExecuteAssembly("PowerShellCertificateTest.exe");
Console.ReadLine();
}
}
[1]: https://i.stack.imgur.com/KzCz0.jpg
答案 0 :(得分:0)
设置下面的配置选项 useLegacyV2RuntimeActivationPolicy 解决了这个问题。但仍在试图弄清楚CurrentDomain如何使用此配置设置。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>