2013-05-03 61 views
0

我有一個有點奇怪的問題..以下行PowerShell中運行良好直接:C#調用PowerShell中,DLL不能加載

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()等版本on)

在-energy上運行同樣的東西可以在控制檯上正常工作,但是如果我嘗試通過C#調用它,它會開始討論缺少'energy.dll'或它的一個依賴關係。依賴關係)當然存在 - 因爲它從命令行運行,並且無論如何都要手動驗證。

Visual Studio是在管理員模式下運行,並且只是爲了安全起見,我建立了AP和在管理員模式下試圖運行直接過

我已經手動嘗試加載的dll

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

但它只是拋出一個額外的錯誤說它

「無法加載文件或程序集‘文件:/// C:\ WINDOWS \ SYSTEM32 \ energy.dll’或它的一個依賴」

有沒有人有什麼想法會導致什麼問題呢? (必須跑一段時間,但如果我在別人之前找到解決方案,我當然會發佈它,一天中的大部分時間都在捶打它,儘管沒有運氣)

+0

嘗試查看'Related'左邊的一些鏈接,這裏可能會幫助你http://stackoverflow.com/questions/527513/execute-powershell-script-from-c-sharp-with-命令行參數 – MethodMan 2013-05-03 02:03:24

+0

謝謝你的建議,其實我已經看過那一個和幾十個了。我沒有問題調用腳本(上面的代碼是基於這些各種鏈接),問題是,通過C#它不能加載內置的能源。DLL(這個鏈接和其他人不包括)。除非我錯過了 - 我肯定有機會跳過鏈接而沒有意識到?這不是一個破損dll(http://stackoverflow.com/questions/4259727/powershell-2-0-runtime-exception-could-not-load-file-or-assembly?rq=1)或類似的東西。 – 2013-05-03 16:23:26

+0

(更新:找到了一個不需要這個調用的解決方法,我會在我的休息時間裏繼續討論這個問題,如果我想出了一些東西,我會發布它 - 無論問題是什麼,我都確信它會再次出現) – 2013-05-03 16:48:24

回答

0

至於-engery是切換到它必須理解的命令,並執行它而不要求彙編。自從powercfg.exe-energy使用異步模型執行之後,應用程序需要等待60secs才能獲得結果。我試着執行如下,worked.My ENV是Win 7的親,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信息性

見{路徑} \調試\能量report.html爲MOR E詳細。