C#:New-SelfSignedCertificate powershell cmdlet无法使用新的应用程序域

时间:2017-11-20 10:08:47

标签: powershell

我试图通过创建新的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

1 个答案:

答案 0 :(得分:0)

设置下面的配置选项 useLegacyV2RuntimeActivationPolicy 解决了这个问题。但仍在试图弄清楚CurrentDomain如何使用此配置设置。

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>