2013-05-03 2 views
0

Я имею немного нечетную проблему .. следующие строки прекрасно работают непосредственно в PowerShell:C# вызова Powershell, DLL не может быть загружена

1) powercfg -AVAILABLESLEEPSTATES  
2) powercfg -energy 

Прямо вперед достаточно, -Энергетика генерирует файл, имеют другие флаги Я мог бы играть.

Бегущая строка 1 из C# работает отлично тоже (ни в одном из прекрасных методов на этом сайте, как

Powershell s_ps = PowerShell.Create(); 
s_ps.AddScript("powercfg -AVAILABLESLEEPSTATES"); 
Collection<PSObject> results = s_ps.Invoke(); 

(или версии, которые выполняются все через трубопровод, или создать PSCommand(), и так on)

Выполнение такого же действия на -energy отлично работает с консоли, но если я попытаюсь позвонить ему через C#, он начнет говорить об отсутствии «energy.dll» или одной из его зависимостей. Все DLL (включая зависимостей), конечно, есть, поскольку он выполняется из командной строки и проверяется вручную в любом случае.

Visual Studio работает в режиме администратора, просто чтобы быть на безопасной стороне, я построил ар и попытался запустить это прямо в режиме администратора слишком

Я попытался вручную загрузке DLL

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

Но он просто бросает дополнительную ошибку, говоря, что

«не удалось загрузить файл или сборку„файла: /// C: \ Windows \ System32 \ energy.dll“или один из его зависимостей»

Есть ли у кого-нибудь мысли о том, что еще может вызвать проблемы? (Должен бежать немного, но если я найду решение перед кем-то другим, я, конечно, опубликую его, надавил на него большую часть дня, хотя не повезло)

+0

Попробуйте найти некоторые ссылки слева в разделе «Соответствующие» здесь, это может помочь вам http://stackoverflow.com/questions/527513/execute-powershell-script-from-c-sharp-with- commandline-arguments – MethodMan

+0

Спасибо за предложение, я действительно просмотрел эту и еще несколько десятков на самом деле. У меня нет проблем с вызовом сценария (приведенный выше код основан на этих различных ссылках), проблема в том, что с помощью C# он не может загрузить встроенную энергию.dll (которые эта ссылка и другие не охватывают). Если я не пропустил один - есть, конечно, шанс, что я пропустил ссылку, не понимая? И это не dll cutsom (http://stackoverflow.com/questions/4259727/powershell-2-0-runtime-exception-could-not-load-file-or-assembly?rq=1) или что-то в этом роде , –

+0

(обновление: обнаружено обходное решение, которое не требует этого вызова. Я буду продолжать возиться с этим в свое время, и если я придумаю что-то, что я опубликую, независимо от того, что проблема, я уверен, что он снова появится) –

ответ

0

Что касается « переключитесь на команду, которую он должен понимать как должный, и выполните ее, не запрашивая сборку. Дело только в том, что powercfg.exe -energy использует выполнение асинхронной модели, приложение должно ждать до 60 секунд для получения результатов. Я попытался выполнения следующим образом и worked.My окр является 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 Информационная

См {путь} \ Debug \ энергии report.html для Mor электронных деталей.

Смежные вопросы