Click here to Skip to main content
Click here to Skip to main content

Hosting EXE Applications in a WinForm project

, 21 Dec 2004
Rate this:
Please Sign up or sign in to vote.
A custom control to launch and embed an EXE into a WinForm based application.

Sample Image


Though not a common task, recently I needed to take an existing executable application and embed it into an application I was building. Oddly enough, I did not need any interaction between my application and the existing EXE. As it ends up, this is not a difficult thing to do. To make it even easier, I created a custom C# control that allows you to specify the name of an executable you want embedded into your application. The control takes care of all the rest.

How does it work

In design time, the user can specify the name of the executable to embed. When the control is created in runtime, it launches the application as follows:

Process p = null; 
  // Start the process 
  p = System.Diagnostics.Process.Start(this.exeName); 

  // Wait for process to be created and enter idle condition 

  // Get the main handle
  appWin = p.MainWindowHandle; 
catch (Exception ex) 
  MessageBox.Show(this, ex.Message, "Error"); 

After launching, the code must then set the parent of the executable's main window to the control handle. It does this as follows:

// Put it into this form
SetParent(appWin, this.Handle);

// Remove border and whatnot
SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);

// Move the window to overlay it on this window
MoveWindow(appWin, 0, 0, this.Width, this.Height, true);

Any time the control is resized, it must also resize the executable window. To do so, it does this in the Resize function:

protected override void OnResize(EventArgs e)
  if (this.appWin != IntPtr.Zero)
    MoveWindow(appWin, 0, 0, this.Width, this.Height, true);
  base.OnResize (e);

Lastly, when the control is destroyed, it should shut down the executable. To do so, it does the following:

protected override void OnHandleDestroyed(EventArgs e)
  // Stop the application
  if (appWin != IntPtr.Zero)

    // Post a colse message
    PostMessage(appWin, WM_CLOSE, 0, 0);

    // Delay for it to get the message

    // Clear internal handle
    appWin = IntPtr.Zero;


  base.OnHandleDestroyed (e);


  • 12-20-2004: Released.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Jay Nelson
Web Developer
United States United States
I have been developing software professionaly since 1991 writing software in Automation and Manufacturing environments. For 14 years I worked for companies that built custom robotic automated equipment for the semiconductor, telecommunications, and other industies. Presently, I work for a medical device manufacturer developing applications for the compact framework.

My undergraduate degrees are in Mathematics and Philosopy. My graduate degree is in Management Information Systems. I am MCSD certified in Visual C++ 6.0 and MCSD.NET certified in C#.

I enjoy triathlons and reading.

Comments and Discussions

QuestionEmbed Unity3D Exe in WPF PinmemberMember 114833814-Mar-15 12:16 
AnswerRe: Embed Unity3D Exe in WPF PinmemberMuhammad Umair9-Mar-15 18:56 
GeneralRe: Embed Unity3D Exe in WPF PinmemberMember 1148338110-Mar-15 4:30 
GeneralRe: Embed Unity3D Exe in WPF PinmemberMuhammad Umair27-Mar-15 7:37 
GeneralRe: Embed Unity3D Exe in WPF PinmemberMember 1148338127-Mar-15 8:18 
QuestionGet if is hosted application still running. PinmemberMember 109639464-Mar-15 6:38 
QuestionThe application is not opening in the panel. PinmemberAthirams00120-Oct-14 2:48 
AnswerRe: The application is not opening in the panel. PinmemberRoykinNg23-Nov-14 20:31 
QuestionSending input from the host Pinmemberbluebristolian22-Jul-14 18:57 
QuestionIexplore launches separately PinmemberOb1kanami18-Jul-14 5:16 
AnswerRe: Iexplore launches separately PinmemberMember 1075482013-Aug-14 22:23 
QuestionI need to be able to exit and restart the embedded app? Any ideas how? PinmemberJybs2811-Jun-14 12:47 
Questionwhy can't I download it PinmemberMember 1078704930-Apr-14 17:35 
QuestionChlid forms in the hosted application don't show up PinmemberMember 1077006325-Apr-14 7:58 
QuestionEmbed same application Pinmembertieugiang9422-Mar-14 7:26 
Questiondisabling title bar/borders PinmemberCatronia17-Mar-14 2:54 
Questioncant download PinmemberMember 1059546813-Feb-14 15:44 
GeneralMy vote of 1 PinmemberMember 475388716-Jan-14 4:29 
Questionhow can i host a C# application (exe file) in a win form in this project? Pinmembermehrdad heidari24-Aug-13 11:06 
GeneralFor those who can't get it working for any application other than notepad PinmemberChristopher Sippel9-Apr-13 8:33 
Questiontoopstrip disabled PinmemberMember 902164118-Feb-13 0:27 
AnswerRe: toopstrip disabled Pinmemberbryonmvi16-Sep-14 8:46 
Questionwindows 7 problem PinmemberMember 930102825-Jul-12 13:26 
AnswerRe: windows 7 problem PinmemberRaRi200323-Nov-12 3:46 
AnswerRe: windows 7 problem PinmemberMember 103874327-Nov-13 13:27 
QuestionHosting External Exe Application in a WPF Window. [modified] Pinmembersukesh.gudikandulla27-May-12 7:35 
Please help me, how to open External exe application in a WPF Window. Thanks...

Below is the code...sample right now..i am using.. let me know what i need to modify in the code work for external exe to launch in WPF window. This is opening application in separately not in WPF Window.

namespace WpfApplication_Blend
/// Interaction logic for Window1.xaml

public partial class Window1 : Window
public IntPtr MainWindowHandle { get; set; }

[DllImport("user32.dll", SetLastError = true)]
private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

//[DllImport("user32.dll", SetLastError = true)]
//private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

public Window1()

//External exe inside WPF Window
System.Windows.Forms.Panel _pnlSched = new System.Windows.Forms.Panel();

WindowsFormsHost windowsFormsHost1 = new WindowsFormsHost();

windowsFormsHost1.Child = _pnlSched;


ProcessStartInfo psi = new ProcessStartInfo(@"C:\Program Files\Atwin\Atwin2k2.exe");

psi.WindowStyle = ProcessWindowStyle.Normal;

Process PR = Process.Start(psi);

PR.WaitForInputIdle(); // true if the associated process has reached an idle state.
SetParent(PR.MainWindowHandle, _pnlSched.Handle); // loading exe to the wpf window.

catch (Exception ex)


modified 27-May-12 13:12pm.

QuestionIt doesn't work in window 7 Pinmemberdhojonline3-Apr-12 3:44 
AnswerRe: It doesn't work in window 7 Pinmemberk3v1n5215-May-12 3:19 
GeneralRe: It doesn't work in window 7 PinmemberMember 899490321-May-12 4:40 
QuestionHow to stop exe flashing up or appearing in taskbar PinmemberJamesA_Dev26-Jan-12 2:24 
QuestionMenus are disabled Pinmemberdelfo8-Aug-11 23:07 
AnswerRe: Menus are disabled Pinmemberbryonmvi16-Sep-14 8:47 
GeneralMy vote of 4 Pinmemberyanghe11173-May-11 5:16 
GeneralMy vote of 5 PinmemberYusuf18-Jan-11 10:35 
QuestionAdvice needed PinmemberHollyY18-Nov-10 13:57 
GeneralWin7 and Vista Incompatable Pinmembercs_can3-Apr-10 4:28 
QuestionPowerPoint Viewer Does Not seem to work PinmemberMember 265354228-Dec-09 22:47 
GeneralAnother problem Pinmemberil172316-Nov-09 6:36 
GeneralProblem Pinmemberil172316-Nov-09 5:59 
GeneralRe: Problem PinmemberElbe Alves Miranda24-Feb-11 4:24 
GeneralReally great, works perfectly after bug fix - thank you very much! PinmemberBlasterwurm10-Nov-09 5:39 
GeneralRe: Really great, works perfectly after bug fix - thank you very much! PinmemberAtchyuta Rao9-Dec-09 21:29 
GeneralRe: Really great, works perfectly after bug fix - thank you very much! Pinmembercs_can3-Apr-10 6:41 
GeneralApplication dosen't work Pinmembertreuveni26-Sep-09 10:37 
GeneralNice Article... But one clarification required ... Running the;s launching the custom control and IE .. separately [modified] PinmemberNikkiee28-May-09 8:00 
GeneralRe: Nice Article... But one clarification required ... Running the;s launching the custom control and IE .. separately [modified] PinmemberBlasterwurm10-Nov-09 3:18 
GeneralRe: Nice Article... But one clarification required ... Running the;s launching the custom control and IE .. separately [modified] Pinmemberbencodeproject2515-Mar-11 12:33 
GeneralRe: Nice Article... But one clarification required ... Running the;s launching the custom control and IE .. separately [modified] Pinmembersukesh.gudikandulla27-May-12 8:43 
GeneralScrolling PinmemberWallbert Elicot22-Apr-09 2:39 
QuestionAll good for Microsoft Programs like notepad and Excel but what about others like winamp? Pinmembernoka036-Apr-09 21:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150331.1 | Last Updated 21 Dec 2004
Article Copyright 2004 by Jay Nelson
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid