使用自定义命令执行shell

时间:2014-01-08 09:53:56

标签: c# windows shell contextmenu explorer

我只是尝试使用C#在Windows 7计算机上执行shell命令。

我在网上找到了这个代码段:

[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],这应该是这个问题的完美之处,但遗憾的是并不是所有的上下文菜单条目都支持)。

更新

我刚用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

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

你能否使用Process.Start()?

您可以使用ProcessStartInfo重载根据需要发送参数。

在System.Diagnostics名称空间中找到。

答案 2 :(得分:0)

正如Jason已经建议的那样, 查看.NET Framework的System.Diagnostics命名空间。它用于调用Process。

您可以将ProcessStartInfo的useShellExecute属性设置为true;抑制窗口产生,。

答案 3 :(得分:0)

最好使用System.Diagnostics.Process类(MSDN)。