c#调用Powershell时,无法加载DLL
本文关键字:加载 DLL 调用 Powershell | 更新日期: 2023-09-27 18:12:00
我有一个有点奇怪的问题…下面的代码行可以直接在powershell中运行:
1) powercfg -AVAILABLESLEEPSTATES
2) powercfg -energy
很简单,-energy生成它的文件,有其他标志我可以玩
从c#中运行第1行也可以很好地工作(在这个站点的任何奇妙的方法中,比如
)。Powershell s_ps = PowerShell.Create();
s_ps.AddScript("powercfg -AVAILABLESLEEPSTATES");
Collection<PSObject> results = s_ps.Invoke();
(或通过管道运行一切的版本,或创建PSCommand(),等等)
在-energy上运行同样的东西在控制台工作得很好,但如果我试图通过c#调用它,它开始谈论丢失'energy.dll'或它的一个依赖项。所有的dll(包括依赖项)当然都在那里——因为它是从命令行运行的,并且无论如何都要手工验证。
Visual Studio在管理模式下运行,只是为了安全起见,我建立了ap并尝试直接在管理模式下运行
我已经尝试手动加载dll
s_ps.AddScript(@"[Reflection.Assembly]::LoadFrom('C:'Windows'System32'energy.dll') | Out-Null");
但是它会抛出一个额外的错误说它是
'无法加载文件或程序集'file:///C:'Windows'System32'energy.dll'或其依赖项之一'
有谁知道还有什么会引起问题吗?(必须运行一点,但如果我找到一个解决方案之前,我当然会发布它,一直在锤击它的大部分时间,虽然没有运气)
至于- energy是命令的切换,它必须正确理解并执行它而不要求汇编。唯一的问题是,由于powercfg.exe -energy使用异步模型执行,应用程序需要等待60秒才能获得结果。我尝试执行以下操作并成功了。我羡慕的是win7 pro, i7,64bit
foreach (var v in PowerShellInterop.RunPowerShellScript("powercfg -energy"))
Console.WriteLine(v);
internal static IEnumerable RunPowerShellScript(string script)
{
PowerShell ps = PowerShell.Create();
ps.AddScript(script);
Collection<PSObject> result = ps.Invoke();
foreach (PSObject obj in result)
{
yield return (obj);
}
}
结果启用跟踪60秒…观察系统行为…分析跟踪数据…分析完成。
发现能源效率问题。
5错误19个警告40信息
参见{path}'Debug'energy-report.html了解更多信息e细节。