Click here to Skip to main content
Licence CPOL
First Posted 5 Jan 2007
Views 15,716
Bookmarked 12 times

What About ProcessStartInfo.ErrorDialog Property? Or Another Way to Show the "Open With" Dialog

By | 5 Jan 2007 | Article
This article describes the use of the ErrorDialog property

Introduction

After several months of being a member on The Code Project, I decided to write my first article. It is about (in my opinion) a badly described and misunderstood property in the .NET Framework called ErrorDialog which is part of the System.Diagnostics.ProcessStartInfo class.

Background

I was writing an application similar to Windows Explorer which is more user-friendlier (hopefully) with some extra features and optimizations. Therefore I needed an implementation to open files from a ListView control. I used the ProcessStartInfo class to realize it.
However, when I tried to open files with extensions like *.bin, *.sys and so on, instead of the "Open With" dialog, only the Win32Exception appeared, which I "caught" first of all....

And There Is a Light At the End of the .NET Framework

... Then I looked for help on The Code Project. The solution I found was to send the SHELLEXECUTEINFO structure with the Verb field set to "openas" through the SHELLEXECUTEINFOEX method. Reasons for not using this solution were unnecessary Win32 call and trying always to use .NET first.

I tried out the "openas" value by setting it to the ProcessStartInfo.Verb property but it didn't work. So I disassembled the System.Diagnostics.Process.Start(ProcessStartInfo) method to its roots and found out that it uses the same way as described in that other article, but with one difference:
The type of the lpVerb field isn't a string but an IntPtr and .NET Framework converts ProcessStartInfo.Verb value to IntPtr type. :(

So I looked at the other properties. And here it comes: it is the ErrorDialog property which is responsible for showing "Open With" dialog!

The Code

Now, after a slightly longer solution, here is the "whole" code to solve the problem.
It is a part of my bigger application written in C#. This code is executed when the user double clicks a file item in the listview.

void lvFiles_ItemActivate(object sender, EventArgs e)
{
    System.Diagnostics.ProcessStartInfo psi = 
    new System.Diagnostics.ProcessStartInfo();
    psi.FileName = this.lvFiles.SelectedItems[0].Name;
    psi.UseShellExecute = true;
    psi.ErrorDialog = true;
    try
    {
        System.Diagnostics.Process.Start(psi);
    }
    catch (Win32Exception ex)
    {
        MessageBox.Show(this, "Couldn't open the file!\n" + 
        ex.ToString(), "Explorer XTreme");
    }
    finally
    {
        psi = null;
    }
}

Here is the code "translated" for Visual Basic users.

Sub lvFiles_ItemActivate(ByVal sender As Object, ByVal e As EventArgs)
    Dim psi As System.Diagnostics.ProcessStartInfo = 
        New System.Diagnostics.ProcessStartInfo()
    psi.FileName = Me.lvFiles.SelectedItems(0).Name
    psi.UseShellExecute = True
    psi.ErrorDialog = True
    Try
        System.Diagnostics.Process.Start(psi)
    Catch ex As Win32Exception
        MessageBox.Show(Me, "Couldn't open the file!\n" + 
            ex.ToString(), "Explorer XTreme")
    Finally
        psi = Nothing
    End Try
End Sub

Points of Interest

First of all, I see that a direct implementation of the SHELLEXECUTEINFO class is more powerful and I think I certainly will use it in my application for other things (e.g. to show Windows File Properties dialog). But the way I showed you is easier for that kind of "problem", of course if you don't always want to let the user choose the application. Another thing I'm angry about is that the use of the Verb property is very limited. I think in .NET Framework documentation, it should be pointed out that this property shows "Open With" dialog, at least on Windows platforms.

OK, I think that's enough for my first article. Have fun with the code.

P.S.: Sorry if my English is not always correct.

History

  • 5th January, 2007: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

ADLER1



Germany Germany

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralErr PinmemberM.Ardekanian23:10 26 Aug '07  

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.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120517.1 | Last Updated 5 Jan 2007
Article Copyright 2007 by ADLER1
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid