Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#开始一个进程?_C#_.net_Windows_Process_Process.start - Fatal编程技术网

如何从C#开始一个进程?

如何从C#开始一个进程?,c#,.net,windows,process,process.start,C#,.net,Windows,Process,Process.start,如何启动流程,例如在用户单击按钮时启动URL?您可以使用该方法启动流程。您甚至可以将URL作为字符串传递,它将启动默认浏览器。使用该类。MSDN文档中有一个如何使用它的示例。正如Matt所说,使用 您可以传递URL或文档。它们将由注册的应用程序启动 例如: Process.Start("Test.Txt"); System.Diagnostics.Process.Start("http://www.google.com"); 这将在加载Text.Txt的情况下启动Notepad.exe。正如

如何启动流程,例如在用户单击按钮时启动URL?

您可以使用该方法启动流程。您甚至可以将URL作为字符串传递,它将启动默认浏览器。

使用该类。MSDN文档中有一个如何使用它的示例。

正如Matt所说,使用

您可以传递URL或文档。它们将由注册的应用程序启动

例如:

Process.Start("Test.Txt");
System.Diagnostics.Process.Start("http://www.google.com");

这将在加载Text.Txt的情况下启动Notepad.exe。

正如Matt Hamilton所建议的,您对流程控制有限的快速方法是在System.Diagnostics.process类上使用静态启动方法

using System.Diagnostics;
...
Process.Start("process.exe");
另一种方法是使用Process类的实例。这允许对流程进行更多的控制,包括调度、它将运行的窗口类型,以及对我最有用的等待流程完成的能力

using System.Diagnostics;
...
Process process = new Process();
// Configure the process using the StartInfo properties.
process.StartInfo.FileName = "process.exe";
process.StartInfo.Arguments = "-n";
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
process.Start();
process.WaitForExit();// Waits here for the process to exit.

这种方法允许的控制比我提到的多得多。

我在自己的程序中使用了以下方法

Process.Start("http://www.google.com/etc/etc/test.txt")

它有点基本,但它为我完成了工作。

包括使用System.Diagnostics的

然后调用这个
Process.Start(“在这里粘贴URL字符串!”)

试着这样做:

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;

namespace btnproce
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string t ="Balotelli";
            Process.Start("http://google.com/search?q=" + t);
        }
    }
}

请注意,这是一个示例ASP.NET页面。您应该试着做一点即兴创作。

您可以使用以下语法来运行任何应用程序:

var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));
System.Diagnostics.Process.Start("Example.exe");
对于URL来说也是一样的。只需在
()
之间写入您的URL即可

例如:

Process.Start("Test.Txt");
System.Diagnostics.Process.Start("http://www.google.com");
申报

[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
[DllImport("user32")]
private static extern bool ShowWindowAsync(IntPtr hwnd, int a);
并将其放入函数中(请注意,“checkInstalled”是可选的,但如果要使用它,则必须实现它)

if(CKECK已安装(“示例”))
{
int count=Process.getProcessByName(“示例”).count();
如果(计数<1)
Process.Start(“example.exe”);
其他的
{
var proc=Process.getProcessByName(“示例”).FirstOrDefault();
if(proc!=null&&proc.MainWindowHandle!=IntPtr.Zero)
{
SetForegroundWindow(过程主窗口句柄);
ShowWindowAsync(proc.MainWindowHandle,3);
}
}
}
注意:我不确定当多个.exe实例正在运行时,这是否有效。

例如,要启动,请使用以下代码:

class ProcessStart
{
    static void Main(string[] args)
    {
        Process notePad = new Process();

        notePad.StartInfo.FileName   = "notepad.exe";
        notePad.StartInfo.Arguments = "ProcessStart.cs";

        notePad.Start();
    }
}
private void button1_Click(object sender, EventArgs e)
{
    string ProgramName = "winword.exe";
    Process.Start(ProgramName);
}
有关更多说明,请查看。

如果在Windows上使用

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.Start();
适用于.Net Framework,但适用于Net core 3.1,还需要将UseShellExecute设置为true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();

您可以使用以下语法:

private void button1_Click(object sender, EventArgs e)  {
   System.Diagnostics.Process.Start(/*your file name goes here*/);
}
甚至这个:

using System;
using System.Diagnostics;
//rest of the code

private void button1_Click(object sender, EventArgs e)  {
   Process.Start(/*your file name goes here*/);
}

这两种方法将执行相同的任务。

我使用此方法使用outlook打开.msg文件,但当我尝试打开另一个.msg文件时,它打开了另一个outlook。有没有办法重用当前流程并避免打开另一个outlook?您应该使用using语句或处理该进程如果没有为此类型注册任何程序,会发生什么?@LC
Win32Exception
(0x80004005)“没有应用程序与此操作的指定文件关联”,当与URL一起使用时,如您的示例所示,这还具有使用系统默认web浏览器打开URL的优势。使用system.Diagnostics;