我有一个奇怪的问题..以下几行直接在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'或其中一个依赖项'
有没有人想知道还有什么会导致问题? (必须运行一段时间,但是如果我在其他人之前找到解决方案,我当然会发布它,在一天中的大部分时间都在敲打它,虽然没有运气)
答案 0 :(得分:0)
只要-engery是一个切换到命令,它必须理解为正确并执行它而不要求组装。唯一的事情是,因为powercfg.exe -energy使用异步模型执行,应用程序需要等到60秒才能获得结果。我尝试执行如下并且工作。我的env是Win 7 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 for mor 详情。