Open a folder using Process.Start
Asked Answered
A

13

200

I saw the other topic and I'm having another problem. The process is starting (saw at task manager) but the folder is not opening on my screen. What's wrong?

System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Acquisition answered 15/7, 2009 at 16:19 Comment(6)
are you sure your path is correct?Clamor
Why do you want to call Explorer manually? Why not just open the folder, i.e. call Process.Start with a ProcessStartInfo with UseShellExecute set to true and Verb set to "open"?Vikkivikky
Yes, I tried opening 'explorer.exe' without the path and didn't work either.Acquisition
Well, I didn't post because the question is not how to open a folder, but rather how to run explorer.exe to open a folder. I just wanted to know why you want to invoke explorer directly in the first place, because there might be a reason ;)Vikkivikky
I just want to exclude options here, so this may be a stupid question: you are not doing this in Linux using mono, right? We are talking a Windows environment?Boice
Yes, Visual Studio | Windows Vista BusinessAcquisition
M
333

Have you made sure that the folder "c:\teste" exists? If it doesn't, explorer will open showing some default folder (in my case "C:\Users\[user name]\Documents").

Update

I have tried the following variations:

// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");

If none of these (well, except the one that throws an exception) work on your computer, I don't think that the problem lies in the code, but in the environment. If that is the case, I would try one (or both) of the following:

  • Open the Run dialog, enter "explorer.exe" and hit enter
  • Open a command prompt, type "explorer.exe" and hit enter
Maciemaciel answered 15/7, 2009 at 16:30 Comment(7)
Well, I'm sure and if it didn't exist, would open any folder same way, or not ?Acquisition
Well, then it might be environment problem .. I opened explorer.exe through cmd and opened normal .. None of the Processs.Start worked except 'Process.Start(@"c:\does_not_exist");' that thrown an exceptionAcquisition
Small difference if that explorer window is already open: Process.Start(path) activates the window (may only blink in task bar, not brought to front); explorer.exe+parameter opens a new window always in the front (but multiple times the same window). So both have caveats.Braunite
Process.Start(@"c:\temp") must be used with caution. If c:\temp.com exists, then the function call will open c:\temp.com instead. See forums.iis.net/p/1239773/2144186.aspx for more details.Drake
Note that Process.Start(@"c:\temp") is susceptible to opening a different folder such as C:\temp.exe or C:\temp.cmd. See this issue where VS itself exhibits buggy behavior. You can avoid this by either using the explorer.exe variant or (better, IMO) always appending a Path.DirectorySeparatorChar. For example, Process.Start(@"C:\temp\").Shockheaded
This worked for me using .NET Framework but doesn't work using .NET Core 3. I had to create a ProcessStartInfo and set UseShellExecute = true.Soudan
really nice. Now the question is: is tehre a way to open the explorer window to a certain position of the screen and with certain dimension?Charioteer
V
91

Just for completeness, if all you want to do is to open a folder, use this:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
    FileName = "C:\\teste\\",
    UseShellExecute = true,
    Verb = "open"
});

Ensure FileName ends with Path.DirectorySeparatorChar to make it unambiguously point to a folder. (Thanks to @binki.)

This solution won't work for opening a folder and selecting an item, since there doesn't seem a verb for that.

Vikkivikky answered 15/7, 2009 at 16:44 Comment(7)
This works for me, both on Windows and on Linux using Mono.Benitobenjamen
If you use this method and a folder such as C:\teste.exe or C:\teste.cmd exists, Explorer will open to that other folder instead of the one you intended. To avoid this, you can append a Path.DirectorySeparatorChar to the path. See how VS itself makes the same mistake.Shockheaded
Given @Scyssion's answer using "/select", you'd think you could use Verb = "select", but alas you cannot. Regardless, great answer!Shetler
This works for me in .NET Core 3, unlike the above accepted answer. Setting Verb = "open" was not necessary. (Tested in Windows, other OS's may differ.)Soudan
You can get the applicable verbs from the .Verbs property on ProcessStartInfo (learn.microsoft.com/en-us/dotnet/api/…)Disused
This works on Unity (Windows) too, if you have to compile it later and so you cannot use the built-in EditorUtilitiesLoriannlorianna
Compare https://mcmap.net/q/129657/-access-is-denied-exception-when-using-process-start-to-open-folder .Lomax
H
27

If you want to select the file or folder you can use the following:

Process.Start("explorer.exe", "/select, c:\\teste");
Hobbledehoy answered 24/8, 2016 at 15:49 Comment(1)
To open a folder instead of selecting it just change /select to /openPoser
A
6

You don't need the double backslash when using unescaped strings:

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Atalaya answered 15/7, 2009 at 16:23 Comment(0)
P
5

You're using the @ symbol, which removes the need for escaping your backslashes.

Remove the @ or replace \\ with \

Peper answered 15/7, 2009 at 16:23 Comment(3)
Still not opening the folder .. Only starting the process @ task managerAcquisition
I have no further suggestions, I was able to test and make it work in Visual C# express 2008Peper
I would say... zebras. There is something wrong with your explorer, maybe virii or someting...Sapajou
F
4

You should use one of the System.Diagnostics.Process.Start() overloads. It's quite simple!

If you don't place the filename of the process you want to run (explorer.exe), the system will recognize it as a valid folder path and try to attach it to the already running Explorer process. In this case, if the folder is already open, Explorer will do nothing.

If you place the filename of the process (as you did), the system will try to run a new instance of the process, passing the second string as a parameter. If the string is a valid folder, it is opened on the newly created process, if not, the new process will do nothing.

I don't know how invalid folder paths are treated by the process in any case. Using System.IO.Directory.Exists() should be enough to ensure that.

Fiddler answered 24/2, 2012 at 20:42 Comment(1)
Don’t forget that you need to append a Path.DirectorySeparatorChar. Otherwise, if a folder with the same name but .cmd or .exe or possibly other suffixes also exists, Explorer will open to that other folder—or if those are actually executables or scripts, it will run them instead of opening the folder as you intended.Shockheaded
M
1

You're escaping the backslash when the at sign does that for you.

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Madelyn answered 15/7, 2009 at 16:24 Comment(0)
B
1

Use an overloaded version of the method that takes a ProcessStartInfo instance and set the ProcessWindowStyle property to a value that works for you.

Brodeur answered 15/7, 2009 at 16:25 Comment(0)
S
1
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste"); 

This code works fine from the VS2010 environment and opens the local folder properly, but if you host the same application in IIS and try to open then it will fail for sure.

Saltillo answered 8/7, 2014 at 8:40 Comment(0)
P
1

Ive just had this issue, and i found out why. my reason isnt listed here so anyone else who gets this issue and none of these fix it.

If you run Visual Studio as another user and attempt to use Process.Start it will run in that users context and you will not see it on your screen.

Pfister answered 17/11, 2017 at 1:40 Comment(0)
S
0

Does it open correctly when you run "explorer.exe c:\teste" from your start menu? How long have you been trying this? I see a similar behavior when my machine has a lot of processes and when I open a new process(sets say IE)..it starts in the task manager but does not show up in the front end. Have you tried a restart?

The following code should open a new explorer instance

class sample{

static void Main()
{
  System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
Sigil answered 15/7, 2009 at 16:47 Comment(0)
U
0

Do you have a lot of applications running when you are trying this? I encounter weird behavior at work sometimes because my system runs out of GDI Handles as I have so many windows open (our apps use alot).

When this happens, windows and context menus no long appear until I close something to free up some GDI handles.

The default limit in XP and Vista is 10000. It is not uncommon for my DevStudio to have 1500 GDI handles, so if you have a couple of copies of Dev studio open, it can eat them up pretty quickly. You can add a column in TaskManager to see how many handles are being used by each process.

There is a registry tweak you can do to increase the limit.

For more information see http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx

Unsaid answered 15/7, 2009 at 17:4 Comment(0)
G
0

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");

Just change the path or declare it in a string

Gutierrez answered 12/1, 2015 at 7:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.