2014-01-08 5 views
0

Я просто пытаюсь выполнить команду оболочки на машине под управлением Windows 7 с помощью C#.Выполнение оболочки с пользовательской командой

Я нашел этот фрагмент в Сети:

[DllImport("shell32.dll", EntryPoint = "ShellExecute")] 
public static extern long ShellExecute(int hwnd, string cmd, string file, string param1, string param2, int swmode); 

void exe() 
{ 
    ShellExecute (0, "open", "C:\WINDOWS\Zapotec.bmp", "", "", 5) 
} 

Это работает очень хорошо, но я не хочу, чтобы открыть его, я хочу, чтобы выполнить пользовательскую команду (от стороннего приложения). Конкретный: я хочу выполнить проверку на вирусы (можно запустить в контекстном меню в проводнике Windows) с помощью антивирусного сканера, который не имеет интерфейса командной строки.

Любые предложения? Я не нашел полезной информации в Интернете. Это не должно быть решение C#. Он также может быть внешним файлом (я нашел программу «runmenu» [http://www.programbits.co.uk/downloads/runmenu.zip], которая должна быть идеальной для этой проблемы, но, к сожалению, не все элементы контекстного меню поддерживаются).

UPDATE

Я только что нашел решение моей проблемы с помощью PowerShell:

PS C:\temp> $o = new-object -com Shell.Application 
PS C:\temp> $folder = $o.NameSpace("C:\temp") 
PS C:\temp> $file=$folder.ParseName("test.txt") 
PS C:\temp> $file.Verbs() | select Name 
PS C:\temp> $file.Verbs() | %{ if($_.Name -eq 'Edit with &Notepad++') { $_.DoIt() } } 

enter link description here

+0

Его немного неясно, что вы хотите сделать. Не можете ли вы просто использовать какой-то скрипт gui-automation, такой как AutoHotKey http://www.autohotkey.com/ или AutoIt http://www.autoitscript.com/site/autoit/ – rdrmntn

ответ

0

Не могли бы вы не использовать Process.Start()?

Вы можете использовать перегрузку ProcessStartInfo для отправки аргументов по мере необходимости.

Найдено в пространстве имен System.Diagnostics.

0

Как уже предложено Jason,
Look in System.Diagnostics Пространство имён. NET Framework. Он используется для вызова процесса.

Вы можете установить свойство useShellExecute для ProcessStartInfo в true; для запрета появления окна.

0

Лучше использовать System.Diagnostics.Process класс (MSDN).

+1

@ user2445254, пожалуйста, не добавляйте новые вопросы в ответы, редактируя их. Используйте комментарии, чтобы спросить у автора ответ. – SoonDead

+0

Мне жаль, я хотел добавить комментарий - недостаток концентрации;) извините. – user2445254

1

Попробуйте это:

using System.Diagnostics; 

private void runCom(string command) 
{ 
    ProcessStartInfo procInfo = new ProcessStartInfo("cmd", "/c" + command); 
    startInfo.UseShellExecute = false; 
    startInfo.CreateNoWindow = true; 
    Process proc = new Process(); 
    proc.StartInfo = startInfo; 
    proc.Start(); 
    proc.WaitForExit(); 
} 
+0

Спасибо за этот ответ. Но как я могу просто выполнить команду оболочки (запись в контекстном меню в проводнике Windows). Ваш код просто запускает исполняемый файл с аргументами? – user2445254

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