56

I'm looking for the .NET-preferred way of performing the same type of thing that ShellExecute does in Win32 (opening, printing, etc. for arbitrary file types).

I've been programming Windows for over 20 years, but I'm a complete newbie at .NET, so maybe I'm just looking in the wrong places. I'm currently using .NET 2.0 (VS C# 2005), but could use VS 2008 if need be.

If the only answer is to use P/Invoke, then I might be better just writing my small utility using Win32 anyway.

mirabilos
  • 5,123
  • 2
  • 46
  • 72
Martin Kenny
  • 2,468
  • 1
  • 19
  • 16

5 Answers5

72

Process.Start.

Note that advanced uses (printing etc) require using a ProcessStartInfo and setting the Verb property.

Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
44
System.Diagnostics.Process.Start(command)

I bet you had trouble finding it because it is in the System.Diagnostics namespace. "Diagnostics"? Usually with 20 years experience one thing you get good at is guessing at what something will be called in a new API/language, but this one tricked me.

StayOnTarget
  • 11,743
  • 10
  • 52
  • 81
Corey Trager
  • 22,649
  • 18
  • 83
  • 121
4

Have you tried System.Diagnostics.Process.Start()?

It's more or less similar to ShellExecute. You can open exes, documents. I haven't checked printing yet, Marc has told you how already.

Andreas
  • 5,393
  • 9
  • 44
  • 53
Cyril Gupta
  • 13,505
  • 11
  • 64
  • 87
1

Here are the original Win32 ShellExecute() docs: https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea

This C# code will work to open a web browser tab for a URL:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "https://www.google.com/";
psi.UseShellExecute = true;
psi.WindowStyle = ProcessWindowStyle.Normal;
Process.Start(psi);
kevinarpe
  • 20,319
  • 26
  • 127
  • 154
0
System.Diagnostics.Process.Start("explorer.exe", path);
mdimai666
  • 699
  • 8
  • 14