C#调用Powershell,无法加载DLL

时间:2013-05-03 00:06:10

标签: c# powershell dll energy powercfg

我有一个奇怪的问题..以下几行直接在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'或其中一个依赖项'

有没有人想知道还有什么会导致问题? (必须运行一段时间,但是如果我在其他人之前找到解决方案,我当然会发布它,在一天中的大部分时间都在敲打它,虽然没有运气)

1 个答案:

答案 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 详情。