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");
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");
Jawaban:
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:
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:
sumber
Process.Start(path)
mengaktifkan jendela (mungkin hanya berkedip di bilah tugas, tidak dibawa ke depan);explorer.exe
Parameter + membuka jendela baru selalu di depan (tetapi beberapa kali jendela yang sama). Jadi keduanya memiliki peringatan.Process.Start(@"c:\temp")
harus digunakan dengan hati-hati. Jikac:\temp.com
ada, maka panggilan fungsi akan terbukac:\temp.com
sebagai gantinya. Lihat forums.iis.net/p/1239773/2144186.aspx untuk lebih jelasnya.Process.Start(@"c:\temp")
rentan untuk membuka folder lain sepertiC:\temp.exe
atauC:\temp.cmd
. Lihat masalah ini di mana VS sendiri menunjukkan perilaku buggy . Anda dapat menghindari ini dengan menggunakanexplorer.exe
varian atau (lebih baik, IMO) selalu menambahkan aPath.DirectorySeparatorChar
. Sebagai contohProcess.Start(@"C:\temp\")
,.Hanya untuk kelengkapan, jika semua yang ingin Anda lakukan adalah membuka folder, gunakan ini:
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.
sumber
C:\teste.exe
atauC:\teste.cmd
ada, Explorer akan membuka ke folder lain itu daripada yang Anda inginkan. Untuk menghindari ini, Anda dapat menambahkan aPath.DirectorySeparatorChar
ke path. Lihat bagaimana VS sendiri membuat kesalahan yang sama .Verb = "select"
, tetapi sayangnya Anda tidak bisa. Apapun, jawaban yang bagus!Verb = "open"
tidak perlu. (Diuji pada Windows, OS lain mungkin berbeda.).Verbs
properti diProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/… )Jika Anda ingin memilih file atau folder Anda dapat menggunakan yang berikut:
sumber
/select
ke/open
Anda menggunakan simbol @, yang menghilangkan kebutuhan untuk melarikan diri dari garis miring terbalik Anda.
Hapus @ atau ganti \\ dengan \
sumber
Anda tidak memerlukan double backslash saat menggunakan string yang tidak dihapus:
sumber
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.sumber
Path.DirectorySeparatorChar
. Kalau tidak, jika folder dengan nama yang sama tetapi.cmd
atau.exe
atau 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.Gunakan versi berlebihan dari metode yang mengambil instance ProcessStartInfo dan mengatur properti ProcessWindowStyle ke nilai yang bekerja untuk Anda.
sumber
Anda lolos dari backslash ketika tanda itu melakukan itu untuk Anda.
sumber
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.
sumber
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.
sumber
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?
sumber
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
sumber
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
sumber
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Cukup ubah jalur atau nyatakan dalam a
string
sumber