C# 用C中的命令行参数启动另一个EXE

C# 用C中的命令行参数启动另一个EXE,c#,command-line-interface,exe,C#,Command Line Interface,Exe,我想用参数启动一个EXE文件 我试着用按钮1启动一个控制台。使用按钮2,我尝试打开相同的控制台PP,参数有效。使用按钮3,我尝试使用参数从应用程序打开窗口。WindowsFromsApplication不运行并强制转换WindowsMessage,该应用程序无法打开,但不能处于调试模式 如果我使用与桌面快捷方式和参数相同的Windows FromsApplication,它将正常工作 我的解决方案出了什么问题 public Form1() { InitializeCom

我想用参数启动一个EXE文件

我试着用按钮1启动一个控制台。使用按钮2,我尝试打开相同的控制台PP,参数有效。使用按钮3,我尝试使用参数从应用程序打开窗口。WindowsFromsApplication不运行并强制转换WindowsMessage,该应用程序无法打开,但不能处于调试模式

如果我使用与桌面快捷方式和参数相同的Windows FromsApplication,它将正常工作

我的解决方案出了什么问题

 public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        System.Diagnostics.Process.Start(Application.StartupPath + "\\ParamTest1.exe");
    }

    private void button2_Click(object sender, EventArgs e)
    {
        System.Diagnostics.Process.Start(Application.StartupPath + "\\ParamTest1.exe", "Test");
    }

    private void button3_Click(object sender, EventArgs e)
    {
        System.Diagnostics.Process.Start(Application.StartupPath + "\\Tool.exe","UserName Password");
    }
tool.exe的代码:

static class Program
{
    /// <summary>
    /// Der Haupteinstiegspunkt für die Anwendung.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new FormMain(args));
    }
}


Visual Studio按计划复制调试文件夹中的EXE。

您需要使用ProcessStartInfo.arguments属性传递参数。请注意,如果args包含空格,则需要在args周围添加引号,因此,我建议您需要如下更正代码smth:

Process.Start(new ProcessStartInfo(Application.StartupPath + "\\Tool.exe")
{
    Arguments = String.Format(@"""{0} {1}""", UserName, Password)
}
);

并确保您的Tool.exe与解决方案的可执行文件位于同一位置。

请阅读。它不起作用不是一个恰当的问题描述。什么是不起作用的?错误?无效结果?您有权访问tool.exe的源代码吗?请在快捷方式中显示您使用的确切命令行。我注意到您正在第三行中运行不同的可执行文件。在您的问题中,您似乎暗示它在调试模式下工作,而不是在发布模式下。它不能打开,但不能在调试模式下工作。您的发行版文件夹中可能不存在像Tool.exe这样简单的东西。请尝试此操作。此操作无法解释您认为此操作可以解决问题的原因或方式。请不要使用正确的拼写并解释您所做的更改。您所更改的是添加引号,引号也可以表示为Process.StartTool.exe、@Username Password,但如果这样做有效,则会使OP的声明中的快捷方式和参数不正确。现在您的答案不正确。您不需要使用ProcessStartInfo及其Arguments属性,这就是Process.Startstring、string重载的用途。此外,如果参数之间要用空格分隔,则不需要在参数周围加引号。我只建议为不同类型的参数提供一个更强大的代码示例-如果您尝试将路径作为参数发送,例如:C:\Program Files\Microsoft Office\。。。。你需要在它周围加上引号,所以我只想分享这个问题的更普遍的解决方案。抱歉,如果我帮不上忙的话。使用这个解决方案,工具只接受一个参数,但我想我可以处理它。
Process.Start(new ProcessStartInfo(Application.StartupPath + "\\Tool.exe")
{
    Arguments = String.Format(@"""{0} {1}""", UserName, Password)
}
);