2009-07-15 76 views
108

我看到了other topic,我遇到了另一個問題。該過程正在開始(在任務管理器中看到),但該文件夾未在我的屏幕上打開。怎麼了?使用Process.Start打開文件夾

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

你確定你的路徑正確嗎? – 2009-07-15 16:31:23

+1

爲什麼你想手動調用資源管理器?爲什麼不打開該文件夾,即調用Process.Start並將UseShellExecute設置爲true並將Verb設置爲「open」的ProcessStartInfo? – OregonGhost 2009-07-15 16:31:45

+1

是的,我試圖打開沒有路徑的'explorer.exe',也沒有工作。 – Daniel 2009-07-15 16:32:24

回答

189

您是否確定文件夾「c:\teste」存在?如果沒有,瀏覽器將打開顯示一些默認文件夾(在我的情況下「C:\Users\[user name]\Documents」)。

更新

我曾嘗試以下變化:

// 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"); 

如果沒有這些(當然,除了拋出異常的那個)在電腦上工作,我不認爲問題在於代碼,但在環境中。如果是這樣的話,我會嘗試下面的一個(或兩個):

  • 打開運行對話框,輸入「explorer.exe的」並回車
  • 打開命令提示符下,鍵入「探險家。 exe「並點擊進入
4

您正在使用@符號,它不需要轉義您的反斜槓。

刪除@或\

3

更換\\使用轉義字符串時,你並不需要雙反斜線:

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

你逃脫反斜線當at符號會替您。

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

使用帶有ProcessStartInfo實例的方法的重載版本,並將ProcessWindowStyle屬性設置爲適合您的值。

0

奇怪。

如果找不到explorer.exe,應該會出現異常。如果它找不到文件夾,它應該仍然打開一些文件夾(例如我的文檔)

你說另一個資源管理器的副本出現在taskmanager中,但你看不到它。

它可能是打開屏幕外(即另一臺顯示器)?

或者你是否有機會在非交互式服務中這樣做?

25

只是爲了保持完整性,如果你想要做的就是打開文件夾,使用此:

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

該解決方案將不打開文件夾,並選擇一個項目工作,因爲不似乎是一個動詞。

0

當您從開始菜單運行「explorer.exe c:\ teste」時它會正確打開嗎?你試了多久?我看到類似的行爲,當我的機器有很多進程,當我打開一個新的進程(設置說IE)..它在任務管理器中啓動,但不在前端顯示。你嘗試過重新啓動嗎?

下面的代碼應該打開一個新的Explorer實例

class sample{ 

static void Main() 
{ 
    System.Diagnostics.Process.Start("explorer.exe",@"c:\teste"); 
} 
} 
0

你有很多,當你試圖這樣運行的應用程序? 我在工作中遇到奇怪的行爲,有時候是因爲我的系統用完了GDI句柄,因爲我打開了很多窗口(我們的應用程序使用了很多)。

發生這種情況時,窗口和上下文菜單不會出現,直到我關閉某些內容以釋放某些GDI句柄。

XP和Vista的默認限制是10000. 我的DevStudio擁有1500個GDI手柄並不罕見,因此如果您有幾個Dev Studio副本打開,它可以很快將它們吃掉。您可以在TaskManager中添加一列來查看每個進程正在使用的手柄數量。

有一個註冊表的調整,你可以做的,以增加限制。

欲瞭解更多信息,請參閱http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx

3

,您應該使用重載System.Diagnostics.Process.Start()之一。這很簡單!

如果您未放置要運行的進程的文件名(explorer.exe),系統會將其識別爲有效的文件夾路徑並嘗試將其附加到已運行的資源管理器進程。在這種情況下,如果該文件夾已經打開,Explorer將不會執行任何操作。

如果您放置進程的文件名(與您一樣),系統將嘗試運行進程的新實例,並將第二個字符串作爲參數傳遞。如果字符串是有效的文件夾,則在新創建的進程上打開該文件夾,否則新進程將不執行任何操作。

我不知道在任何情況下進程如何處理無效的文件夾路徑。使用System.IO.Directory.Exists()應該足以確保。

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

此代碼工作正常從VS2010環境和正確打開本地文件夾,但如果你的主機在IIS中的同一個應用程序,並嘗試打開它的失敗是肯定的。

0

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

只需更改路徑,或如果您要選擇的文件或文件夾,你可以使用下面的string

9

聲明它:

Process.Start("explorer.exe", "/select, c:\\teste"); 
0

我剛有這個問題,我發現了原因。我的理由並沒有在這裏列出,所以誰得到這個問題,並沒有任何這些修復它。

如果以另一個用戶的身份運行Visual Studio並嘗試使用Process.Start,它將在該用戶上下文中運行,並且您不會在屏幕上看到它。