Buka folder menggunakan Process.Start


148

Saya melihat topik lain dan saya mengalami masalah lain. Prosesnya mulai (lihat di task manager) tetapi folder tidak terbuka di layar saya. Apa yang salah?

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

apakah Anda yakin jalan Anda benar?
Nathan Koop

1
Mengapa Anda ingin memanggil Explorer secara manual? Mengapa tidak membuka folder saja, misalnya panggil Process.Start dengan ProcessStartInfo dengan UseShellExecute yang disetel ke true dan Kata Kerja diatur ke "buka"?
OregonGhost

1
Ya, saya mencoba membuka 'explorer.exe' tanpa path dan tidak berhasil.
Daniel

Yah, saya tidak memposting karena pertanyaannya bukan bagaimana membuka folder, tetapi bagaimana menjalankan explorer.exe untuk membuka folder. Aku hanya ingin tahu mengapa Anda ingin memohon explorer langsung di tempat pertama, karena mungkin ada alasan;)
OregonGhost

Saya hanya ingin mengecualikan opsi di sini, jadi ini mungkin pertanyaan bodoh: Anda tidak melakukan ini di Linux menggunakan mono, kan? Kita berbicara tentang lingkungan Windows?
Fredrik Mörk

Jawaban:


266

Sudahkah Anda memastikan bahwa folder " c:\teste" ada? Jika tidak, explorer akan terbuka menampilkan beberapa folder default (dalam kasus saya " C:\Users\[user name]\Documents").

Memperbarui

Saya sudah mencoba variasi berikut:

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

Jika tidak satu pun dari ini (yah, kecuali yang melempar pengecualian) bekerja di komputer Anda, saya tidak berpikir bahwa masalahnya terletak pada kode, tetapi di lingkungan. Jika itu masalahnya, saya akan mencoba salah satu (atau keduanya) berikut ini:

  • Buka dialog Run, masukkan "explorer.exe" dan tekan enter
  • Buka prompt perintah, ketik "explorer.exe" dan tekan enter

Yah, saya yakin dan jika tidak ada, akan membuka folder dengan cara yang sama, atau tidak?
Daniel

Nah, maka itu mungkin masalah lingkungan .. Saya membuka explorer.exe melalui cmd dan membuka normal .. Tak satu pun dari Proses. Mulai bekerja kecuali 'Process.Start (@ "c: \ does_not_exist");' itu melempar pengecualian
Daniel.

1
Perbedaan kecil jika jendela explorer itu sudah terbuka: Process.Start(path) mengaktifkan jendela (mungkin hanya berkedip di bilah tugas, tidak dibawa ke depan); explorer.exeParameter + membuka jendela baru selalu di depan (tetapi beberapa kali jendela yang sama). Jadi keduanya memiliki peringatan.
KekuSemau

Process.Start(@"c:\temp")harus digunakan dengan hati-hati. Jika c:\temp.comada, maka panggilan fungsi akan terbuka c:\temp.comsebagai gantinya. Lihat forums.iis.net/p/1239773/2144186.aspx untuk lebih jelasnya.
Lex Li

Catatan yang Process.Start(@"c:\temp")rentan untuk membuka folder lain seperti C:\temp.exeatau C:\temp.cmd. Lihat masalah ini di mana VS sendiri menunjukkan perilaku buggy . Anda dapat menghindari ini dengan menggunakan explorer.exevarian atau (lebih baik, IMO) selalu menambahkan a Path.DirectorySeparatorChar. Sebagai contoh Process.Start(@"C:\temp\"),.
binki

46

Hanya untuk kelengkapan, jika semua yang ingin Anda lakukan adalah membuka folder, gunakan ini:

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

Pastikan FileName diakhiri dengan Path.DirectorySeparatorChar membuatnya menunjuk ke suatu folder. (Terima kasih kepada @binki.)

Solusi ini tidak akan berfungsi untuk membuka folder dan memilih item, karena sepertinya tidak ada kata kerja untuk itu.


Ini berfungsi untuk saya, baik di Windows maupun di Linux menggunakan Mono.
Menno Deij - van Rijswijk

1
Jika Anda menggunakan metode ini dan folder seperti C:\teste.exeatau C:\teste.cmdada, Explorer akan membuka ke folder lain itu daripada yang Anda inginkan. Untuk menghindari ini, Anda dapat menambahkan a Path.DirectorySeparatorCharke path. Lihat bagaimana VS sendiri membuat kesalahan yang sama .
binki

Diberikan jawaban @ Scyssion menggunakan "/ select", Anda akan berpikir Anda bisa menggunakan Verb = "select", tetapi sayangnya Anda tidak bisa. Apapun, jawaban yang bagus!
idbrii

1
Ini berfungsi untuk saya di .NET Core 3, tidak seperti jawaban yang diterima di atas. Pengaturan Verb = "open"tidak perlu. (Diuji pada Windows, OS lain mungkin berbeda.)
Walt D

Anda bisa mendapatkan kata kerja yang berlaku dari .Verbsproperti di ProcessStartInfo( docs.microsoft.com/en-us/dotnet/api/… )
GaryNg

16

Jika Anda ingin memilih file atau folder Anda dapat menggunakan yang berikut:

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

2
Untuk membuka folder alih-alih memilihnya, ubah saja /selectke/open
SushiGuy

5

Anda menggunakan simbol @, yang menghilangkan kebutuhan untuk melarikan diri dari garis miring terbalik Anda.

Hapus @ atau ganti \\ dengan \


Masih tidak membuka folder .. Hanya memulai proses @ task manager
Daniel

Saya tidak punya saran lebih lanjut, saya bisa menguji dan membuatnya bekerja di Visual C # express 2008
Kevin Laity

1
Saya akan mengatakan ... zebra. Ada sesuatu yang salah dengan penjelajah Anda, mungkin virii atau sesuatu ...
R. Martinho Fernandes

4

Anda tidak memerlukan double backslash saat menggunakan string yang tidak dihapus:

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

3

Anda harus menggunakan salah satu System.Diagnostics.Process.Start()kelebihan. Sederhana saja!

Jika Anda tidak menempatkan nama file proses yang ingin Anda jalankan (explorer.exe ), sistem akan mengenalinya sebagai jalur folder yang valid dan mencoba melampirkannya ke proses Explorer yang sudah berjalan. Dalam hal ini, jika folder sudah terbuka, Explorer tidak akan melakukan apa-apa.

Jika Anda menempatkan nama file proses (seperti yang Anda lakukan), sistem akan mencoba menjalankan instance proses yang baru, meneruskan string kedua sebagai parameter. Jika string adalah folder yang valid, itu dibuka pada proses yang baru dibuat, jika tidak, proses baru tidak akan melakukan apa-apa.

Saya tidak tahu bagaimana jalur folder yang tidak valid diperlakukan oleh proses dalam hal apa pun. Penggunaan System.IO.Directory.Exists()harus cukup untuk memastikan hal itu.


Jangan lupa bahwa Anda perlu menambahkan a Path.DirectorySeparatorChar. Kalau tidak, jika folder dengan nama yang sama tetapi .cmdatau .exeatau mungkin sufiks lain juga ada, Explorer akan membuka ke folder lain itu — atau jika itu sebenarnya executable atau skrip, itu akan menjalankannya alih-alih membuka folder seperti yang Anda inginkan.
binki

1

Gunakan versi berlebihan dari metode yang mengambil instance ProcessStartInfo dan mengatur properti ProcessWindowStyle ke nilai yang bekerja untuk Anda.


1

Anda lolos dari backslash ketika tanda itu melakukan itu untuk Anda.

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

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

Kode ini berfungsi dengan baik dari lingkungan VS2010 dan membuka folder lokal dengan benar, tetapi jika Anda meng-host aplikasi yang sama di IIS dan mencoba untuk membuka maka pasti gagal.


1

Saya baru saja mengalami masalah ini, dan saya menemukan alasannya. alasan saya tidak tercantum di sini sehingga orang lain yang mendapatkan masalah ini dan tidak ada yang memperbaikinya.

Jika Anda menjalankan Visual Studio sebagai pengguna lain dan mencoba menggunakan Process.Start itu akan berjalan dalam konteks pengguna itu dan Anda tidak akan melihatnya di layar Anda.


0

Aneh.

Jika tidak dapat menemukan explorer.exe, Anda harus mendapatkan pengecualian. Jika tidak dapat menemukan folder, itu masih harus membuka beberapa folder (mis. Dokumen saya)

Anda mengatakan salinan Explorer lain muncul di taskmanager, tetapi Anda tidak dapat melihatnya.

Apakah mungkin membuka layar (yaitu monitor lain)?

Atau apakah Anda kebetulan melakukan ini dalam layanan non-interaktif?


Saya hanya punya 1 monitor, dan "Anda mengatakan salinan Explorer lain muncul di taskmanager, tetapi Anda tidak dapat melihatnya." ini benar .. Saya tidak tahu apa yang Anda maksudkan "Atau apakah Anda kebetulan melakukan ini dalam layanan non-interaktif?"
Daniel

Maksud saya jika program yang Anda tulis adalah layanan (yang secara default berjalan sepenuhnya di latar belakang) sebagai lawan dari program winforms normal. (Jika Anda tidak tahu apa layanan itu, kecil kemungkinan Anda menulisnya). Kembali ke pengelola tugas, jika Anda memilih 'beralih ke', 'bawa ke depan' atau 'maksimalkan' pada jendela penjelajah tersembunyi ini, apakah itu muncul?
sgmoore

0

Apakah itu terbuka dengan benar ketika Anda menjalankan "explorer.exe c: \ teste" dari menu mulai Anda? Sudah berapa lama Anda mencoba ini? Saya melihat perilaku serupa ketika mesin saya memiliki banyak proses dan ketika saya membuka proses baru (set katakan IE) .. dimulai di task manager tetapi tidak muncul di ujung depan. Sudahkah Anda mencoba memulai ulang?

Kode berikut harus membuka instance explorer baru

class sample{

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

0

Apakah Anda memiliki banyak aplikasi yang berjalan ketika Anda mencoba ini? Saya menghadapi perilaku aneh di tempat kerja kadang-kadang karena sistem saya kehabisan GDI Handles karena saya memiliki begitu banyak jendela terbuka (aplikasi kami menggunakan banyak).

Ketika ini terjadi, jendela dan menu konteks tidak lama muncul sampai saya menutup sesuatu untuk membebaskan beberapa pegangan GDI.

Batas default di XP dan Vista adalah 10.000. Tidak jarang DevStudio saya memiliki 1500 pegangan GDI, jadi jika Anda memiliki beberapa salinan Dev studio terbuka, dapat memakannya dengan cukup cepat. Anda bisa menambahkan kolom di TaskManager untuk melihat berapa banyak pegangan yang digunakan oleh setiap proses.

Ada tweak registri yang dapat Anda lakukan untuk meningkatkan batas.

Untuk informasi lebih lanjut, lihat http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx


0

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

Cukup ubah jalur atau nyatakan dalam a string

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.