2015-11-03 2 views
2
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Diagnostics; 


namespace WindowsFormsApplication 
{ 
    public partial class Form1 : Form 
    { 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      var newProcessInfo = new System.Diagnostics.ProcessStartInfo(); 
      newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"; 
      newProcessInfo.Verb = "runas"; 
      System.Diagnostics.Process.Start(newProcessInfo); 
      newProcessInfo.Arguments = @"sfc /scannow"; 
     } 
    } 
} 

Так что мой код работает до определенной точки. вы нажимаете кнопку приложения формы окна и запускаете Windows Powershell в 64-разрядной версии в качестве администратора, но не запускаете сценарий .ps1 «c: \ path \ script.ps1» или команду, написанную напрямую, как «sfc/scannow», выше.Запустите команду Powershell в качестве администратора. Команды сами не загрузятся

Я читал, что команды powershell не будут работать, если «Set-ExecutionPolicy Unrestricted» не загружается где-то в начале кода.

Пожалуйста, помогите! Я везде искал ответ.

+0

'[...] \ SysWOW64 \ [...] \ powershell.exe' - * 32-разрядная * powershell –

+0

Почему вы не запускаете команду без powershell? –

+0

Это был просто пример. Я буду использовать команды Powershell для некоторых программ. Итак, какая папка является 64-разрядной версией PowerShell, если это неверно. SysWOW64 должен быть полностью 64-разрядной версией системы Windows. – DDJ

ответ

1

Прежде всего, необходимо указать Arguments свойство перед тем началом процесса:

var newProcessInfo = new System.Diagnostics.ProcessStartInfo(); 
newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"; 
newProcessInfo.Verb = "runas"; 
newProcessInfo.Arguments = @"sfc /scannow"; 
System.Diagnostics.Process.Start(newProcessInfo); 

Во-вторых, вы должны сказать, что PowerShell sfc /scannow это команда, а не команда переключает строки ,

В командной строке вы могли бы сделать powershell.exe -Command "sfc /scannow", поэтому правильное Arguments значение в вашем случае будет

newProcessInfo.Arguments = @"-Command ""sfc /scannow"""; 

("" является последовательность для " в стенографических строковых литералов)

Для .ps1 файлов , используйте переключатель -File:

newProcessInfo.Arguments = @"-File ""C:\my\script.ps1"""; 

Если вы не знаете политику выполнения на целевой системе, вы можете обойти его, не влияя на машину для всей политики с -ExecutionPolicy Bypass:

newProcessInfo.Arguments = @"–ExecutionPolicy Bypass -File ""C:\my\script.ps1"""; 
+0

Благодарим вас за все ваши знания! Это действительно помогло мне. :) – DDJ