我有以下C#代码
using (RunspaceInvoke invoker = new RunspaceInvoke())
{
invoker.Invoke("Set-ExecutionPolicy Unrestricted");
// ...
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个例外
访问注册表项"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"被拒绝.
根据此,解决的办法是启动PowerShell中以管理员身份.
通常,可以通过右键单击PowerShell并选择"以管理员身份运行"来完成此操作.有没有办法以编程方式执行此操作?
检查该出
您需要以管理员身份进行模拟(您当然需要管理员凭据)
检查那篇文章,其中还附带了可以使用的代码(我已经使用过它并且效果很好)
基本上,你需要这样做:
using ( new Impersonator( "myUsername", "myDomainname", "myPassword" ) )
{
using (RunspaceInvoke invoker = new RunspaceInvoke())
{
invoker.Invoke("Set-ExecutionPolicy Unrestricted");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我知道这是一篇旧文章,但我们最近遇到了同样的问题。
我们必须通过从 PowerShell 运行以下命令来确定运行 C# 代码的计算机上的执行策略的范围...
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
Run Code Online (Sandbox Code Playgroud)
当我们之前完成此操作时,在没有范围界定的情况下,我们正在为管理员设置执行策略。Visual Studio \ C# 以当前用户身份运行,导致其因权限不足而失败。
| 归档时间: |
|
| 查看次数: |
27534 次 |
| 最近记录: |