C# 在windows窗体应用程序中运行外部exe

C# 在windows窗体应用程序中运行外部exe,c#,C#,我有一个c#驱动的windows窗体应用程序,我想在其中运行一个exe。该程序是另一个独立的可执行文件。假设exe不是一个dotnet应用程序,而是用另一种语言编写的,这有关系吗 所以我想让这个程序位于我的winforms中,我该怎么做??另外,我可以把它放在winforms中的任何地方吗?默认情况下是否已包含类似的属性?谢谢你试过做这些吗?如果是,应采取哪些步骤?感谢您创建了一个很好的开发人员社区。我真的很珍惜这个你可以通过PInvokingSetParent()来做到这一点: 首先,您需要在

我有一个c#驱动的windows窗体应用程序,我想在其中运行一个exe。该程序是另一个独立的可执行文件。假设exe不是一个dotnet应用程序,而是用另一种语言编写的,这有关系吗


所以我想让这个程序位于我的winforms中,我该怎么做??另外,我可以把它放在winforms中的任何地方吗?默认情况下是否已包含类似的属性?谢谢你试过做这些吗?如果是,应采取哪些步骤?感谢您创建了一个很好的开发人员社区。我真的很珍惜这个

你可以通过PInvoking
SetParent()来做到这一点

首先,您需要在应用程序中启动第三方应用程序:

var clientApplication = Process.Start("PATH_TO_YOUR_EXECUTABLE");
然后将其
MainWindowHandle
设置为主窗口句柄:

SetParent(clientApplication.MainWindowHandle, YourMainWindowOrAContainerControl.Handle);

引用fardjad,但它只能运行记事本、firefox、safari等小程序

设置名称也不会有什么坏处。重复的?
SetParent(clientApplication.MainWindowHandle, YourMainWindowOrAContainerControl.Handle);
    [DllImport("user32.dll")]
        static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);    

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {

                Process p = Process.Start(textBox1.Text);
                p.WaitForInputIdle();
                SetParent(p.MainWindowHandle, panel1.Handle);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
}