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:
// 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:
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. Jika c:\temp.com
ada, maka panggilan fungsi akan terbuka c:\temp.com
sebagai gantinya. Lihat forums.iis.net/p/1239773/2144186.aspx untuk lebih jelasnya.
Process.Start(@"c:\temp")
rentan untuk membuka folder lain seperti C:\temp.exe
atau C:\temp.cmd
. Lihat masalah ini di mana VS sendiri menunjukkan perilaku buggy . Anda dapat menghindari ini dengan menggunakan explorer.exe
varian atau (lebih baik, IMO) selalu menambahkan a Path.DirectorySeparatorChar
. Sebagai contoh Process.Start(@"C:\temp\")
,.
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.
C:\teste.exe
atau C:\teste.cmd
ada, Explorer akan membuka ke folder lain itu daripada yang Anda inginkan. Untuk menghindari ini, Anda dapat menambahkan a Path.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 di ProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/… )
Anda menggunakan simbol @, yang menghilangkan kebutuhan untuk melarikan diri dari garis miring terbalik Anda.
Hapus @ atau ganti \\ dengan \
Anda tidak memerlukan double backslash saat menggunakan string yang tidak dihapus:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
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.
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.
Anda lolos dari backslash ketika tanda itu melakukan itu untuk Anda.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
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.
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.
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?
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");
}
}
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
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Cukup ubah jalur atau nyatakan dalam a string