ShellExecute (shell32)
Last changed: -188.102.225.40

.
Summary

C# Signature:

[DllImport("shell32.dll")]
static extern IntPtr ShellExecute(
    IntPtr hwnd,
    string lpOperation,
    string lpFile,
    string lpParameters,
    string lpDirectory,
    int nShowCmd);

User-Defined Types:

None.

Return Values:

If the return value is greater than 32, the ShellExecute call was successfully executed. Otherwise, check for one of these constants:

ERROR_SUCCESS The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image).
SE_ERR_ACCESSDENIED The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid.
SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL The DDE transaction failed.
SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND The specified dynamic-link library (DLL) was not found.
SE_ERR_FNF The specified file was not found.
SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM There was not enough memory to complete the operation.
SE_ERR_PNF The specified path was not found.
SE_ERR_SHARE A sharing violation occurred.

Notes:

None.

Tips & Tricks:

Possible values for lpOperation

edit

explore

find

open

print

NULL - Performs the default action (prior to Win2k) normally open

Sample Code:

    // Asks default mail client to send an email to the specified address.
    ShellExecute( IntPtr.Zero, "open", "mailto:support@microsoft.com", "", "", 4 );

    // Asks default browser to visit the specified site.
    ShellExecute( IntPtr.Zero, "open", "http://channel9.msdn.com", "", "", 4 );

    // Opens default HTML editing app to allow for edit of specified file
    ShellExecute( IntPtr.Zero, "edit", @"c:\file.html", "", "", 4 );

//Modified by Aljaz: Replaced the last zero in these calls with 4 otherwise it wouldn't show anything

// 0 stands for SW_HIDE contant, which means execute but don't show the window which is probably not

// what we want.

Alternative Managed API:

Do you know one? Please contribute it!

Process.Start Method

Starts a process resource and associates it with a Process component.

Overload List

Starts (or reuses) the process resource that is specified by the StartInfo property of this Process component and associates it with the component.

[Visual Basic] Overloads Public Function Start() As Boolean

[C#] public bool Start();

[C++] public: bool Start();

JScript public function Start() : Boolean;

Starts the process resource that is specified by the parameter containing process start information (for example, the file name of the process to start) and associates the resource with a new Process component.

[Visual Basic] Overloads Public Shared Function Start(ProcessStartInfo) As Process

[C#] public static Process Start(ProcessStartInfo);

[C++] public: static Process* Start(ProcessStartInfo*);

JScript public static function Start(ProcessStartInfo) : Process;

Starts a process resource by specifying the name of a document or application file and associates the resource with a new Process component.

[Visual Basic] Overloads Public Shared Function Start(String) As Process

[C#] public static Process Start(string);

[C++] public: static Process* Start(String*);

JScript public static function Start(String) : Process;

Starts a process resource by specifying the name of an application and a set of command-line arguments, and associates the resource with a new Process component.

[Visual Basic] Overloads Public Shared Function Start(String, String) As Process

[C#] public static Process Start(string, string);

[C++] public: static Process* Start(String*, String*);

JScript public static function Start(String, String) : Process;

Example

[Visual Basic]

Imports System

Imports System.Diagnostics

Imports System.ComponentModel

Namespace MyProcessSample

    _
   '/ <summary>
   '/ Shell for the sample.
   '/ </summary>
   Public Class MyProcess


      '/ <summary>
      '/ Opens the Internet Explorer application.
      '/ </summary>
      Public Sub OpenApplication(myFavoritesPath As String)
     ' Start Internet Explorer. Defaults to the home page.
     Process.Start("IExplore.exe")

     ' Display the contents of the favorites folder in the browser.
     Process.Start(myFavoritesPath)
      End Sub 'OpenApplication


      '/ <summary>
      '/ Opens urls and .html documents using Internet Explorer.
      '/ </summary>
      Public Sub OpenWithArguments()
     ' url's are not considered documents. They can only be opened
     ' by passing them as arguments.
     Process.Start("IExplore.exe", "www.northwindtraders.com")

     ' Start a Web page using a browser associated with .html and .asp files.
     Process.Start("IExplore.exe", "C:\myPath\myFile.htm")
     Process.Start("IExplore.exe", "C:\myPath\myFile.asp")
      End Sub 'OpenWithArguments


      '/ <summary>
      '/ Uses the ProcessStartInfo class to start new processes, both in a minimized
      '/ mode.
      '/ </summary>
      Public Sub OpenWithStartInfo()

     Dim startInfo As New ProcessStartInfo("IExplore.exe")
     startInfo.WindowStyle = ProcessWindowStyle.Minimized

     Process.Start(startInfo)

     startInfo.Arguments = "www.northwindtraders.com"

     Process.Start(startInfo)
      End Sub 'OpenWithStartInfo


      Public Shared Sub Main()
     ' Get the path that stores favorite links.
     Dim myFavoritesPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Favorites)

     Dim myProcess As New MyProcess()

     myProcess.OpenApplication(myFavoritesPath)
     myProcess.OpenWithArguments()
     myProcess.OpenWithStartInfo()
      End Sub 'Main
   End Class 'MyProcess

End Namespace 'MyProcessSample

[C#]

using System;

using System.Diagnostics;

using System.ComponentModel;

namespace MyProcessSample

{

    /// <summary>
    /// Shell for the sample.
    /// </summary>
    public class MyProcess
    {

    /// <summary>
    /// Opens the Internet Explorer application.
    /// </summary>
    public void OpenApplication(string myFavoritesPath)
    {
        // Start Internet Explorer. Defaults to the home page.
        Process.Start("IExplore.exe");

        // Display the contents of the favorites folder in the browser.
        Process.Start(myFavoritesPath);

    }

    /// <summary>
    /// Opens urls and .html documents using Internet Explorer.
    /// </summary>
    public void OpenWithArguments()
    {
        // url's are not considered documents. They can only be opened
        // by passing them as arguments.
        Process.Start("IExplore.exe", "www.northwindtraders.com");

        // Start a Web page using a browser associated with .html and .asp files.
        Process.Start("IExplore.exe", "C:\\myPath\\myFile.htm");
        Process.Start("IExplore.exe", "C:\\myPath\\myFile.asp");
    }

    /// <summary>
    /// Uses the ProcessStartInfo class to start new processes, both in a minimized
    /// mode.
    /// </summary>
    public void OpenWithStartInfo()
    {

        ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Minimized;

        Process.Start(startInfo);

        startInfo.Arguments = "www.northwindtraders.com";

        Process.Start(startInfo);

    }

    public static void Main()
    {
            // Get the path that stores favorite links.
            string myFavoritesPath =
            Environment.GetFolderPath(Environment.SpecialFolder.Favorites);

            MyProcess myProcess = new MyProcess();

        myProcess.OpenApplication(myFavoritesPath);
        myProcess.OpenWithArguments();
        myProcess.OpenWithStartInfo();

           }    
    }

}

Documentation