【问题标题】:C# invoking Powershell, DLL could not be loadedC# 调用 Powershell,无法加载 DLL
【发布时间】:2013-04-27 07:29:21
【问题描述】:

我有一个有点奇怪的问题.. 以下行直接在 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 正在管理员模式下运行,为了安全起见,我构建了应用程序并尝试直接在管理员模式下运行它

我试过手动加载dll

 s_ps.AddScript(@"[Reflection.Assembly]::LoadFrom('C:\Windows\System32\energy.dll') | Out-Null");

但它只是抛出一个额外的错误说它

'无法加载文件或程序集 'file:///C:\Windows\System32\energy.dll' 或其依赖项之一'

是否有人对其他会导致问题的问题有任何想法? (必须运行一段时间,但如果我在其他人之前找到解决方案,我当然会发布它,虽然没有运气,但大部分时间都在努力)

【问题讨论】:

  • 尝试查看左侧Related 下方的一些链接,这可能对您有所帮助stackoverflow.com/questions/527513/…
  • 感谢您的建议,我实际上已经浏览了那一个和几十个。我调用脚本没有问题(上面的代码基于这些不同的链接),问题是通过c#它无法加载内置的energy.dll(该链接和其他链接没有涵盖)。除非我错过了一个 - 肯定有可能我在没有意识到的情况下跳过了一个链接?这不是一个 cutsom dll (stackoverflow.com/questions/4259727/…) 或类似的东西。
  • (更新:找到了一个不需要这个调用的解决方法。我会在我的休息时间继续搞砸这个,如果我想出一些东西我会发布它 - 无论问题是什么,我我相信它会再次出现)

标签: c# powershell dll energy powercfg


【解决方案1】:

至于 -engery 是一个命令的开关,它必须理解为正确并在不要求汇编的情况下执行它。唯一的问题是,由于 powercfg.exe -energy 使用异步模型执行,应用程序需要等待 60 秒才能获得结果。我尝试如下执行并工作。我的环境是 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 了解更多信息 详细信息。

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2020-09-19
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多