Diğer konuyu gördüm ve başka bir sorunla karşılaşıyorum. İşlem başlıyor (görev yöneticisinde gördü), ancak klasör ekranımda açılmıyor. Sorun nedir?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Diğer konuyu gördüm ve başka bir sorunla karşılaşıyorum. İşlem başlıyor (görev yöneticisinde gördü), ancak klasör ekranımda açılmıyor. Sorun nedir?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Yanıtlar:
" c:\teste
" Klasörünün var olduğundan emin misiniz ? Başlamazsa, gezgin bazı varsayılan klasörleri göstererek açılır (benim durumumda "C:\Users\[user name]\Documents
") .
Güncelleme
Aşağıdaki varyasyonları denedim:
// 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");
Bunlardan hiçbiri (iyi, bir istisna atan dışında) bilgisayarınızda çalışmıyorsa, sorunun kodda değil, çevrede olduğunu düşünmüyorum. Bu durumda, aşağıdakilerden birini (veya her ikisini) deneyeceğim:
Process.Start(path)
pencereyi etkinleştirir (yalnızca görev çubuğunda yanıp sönebilir, öne getirilmeyebilir); explorer.exe
+ parametresi her zaman önde yeni bir pencere açar (ancak aynı pencerenin birkaç katı). Yani ikisinin de uyarısı var.
Process.Start(@"c:\temp")
dikkatle kullanılmalıdır. Varsa c:\temp.com
, c:\temp.com
bunun yerine işlev çağrısı açılır . Daha fazla bilgi için forums.iis.net/p/1239773/2144186.aspx adresine bakın.
Process.Start(@"c:\temp")
gibi farklı bir klasör açmaya duyarlı olduğunu unutmayın . VS'nin buggy davranışı sergilediği bu konuya bakın . Bundan kaçınarak varyantı veya (daha iyi, IMO) kullanarak her zaman a . Örneğin ,. C:\temp.exe
C:\temp.cmd
explorer.exe
Path.DirectorySeparatorChar
Process.Start(@"C:\temp\")
Sadece bütünlük için, tek yapmanız gereken bir klasör açmaksa, bunu kullanın:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
Path.DirectorySeparatorChar
Dosya klasörünün açıkça bir klasörü göstermesini sağlamak için DosyaAdı'nın sona erdiğinden emin olun . (@Binki sayesinde.)
Bu çözüm, bir klasör açmak ve bir öğe seçmek için işe yaramaz, çünkü bunun için bir fiil görünmemektedir.
C:\teste.exe
veya gibi bir klasörü kullanırsanız C:\teste.cmd
, Explorer istediğiniz klasör yerine bu klasörü açar. Bundan kaçınmak Path.DirectorySeparatorChar
için yola bir ekleyebilirsiniz . Bkz VS kendisi aynı hatayı yapar nasıl .
Verb = "select"
, ama kullanamazsınız. Ne olursa olsun, harika bir cevap!
Verb = "open"
gerekli değildi. (Windows'ta test edilmiştir, diğer işletim sistemleri farklı olabilir.)
.Verbs
üzerinde mülkiyet ProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/... )
Ters eğik çizgilerinizden kaçma ihtiyacını ortadan kaldıran @ simgesini kullanıyorsunuz.
@ İşaretini kaldırın veya \\ yerine \
Çıkış karakteri olmayan dizeler kullanırken çift ters eğik çizgiye ihtiyacınız yoktur:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Şunlardan birini kullanmalısınız: System.Diagnostics.Process.Start()
Aşırı yüklenmelerden . Oldukça basit!
Çalıştırmak istediğiniz işlemin dosya adını ( explorer.exe
) yerleştirmezseniz, sistem bu dosyayı geçerli bir klasör yolu olarak algılar ve zaten çalışan Explorer işlemine eklemeye çalışır. Bu durumda, klasör zaten açıksa, Explorer hiçbir şey yapmaz.
İşlemin dosya adını (yaptığınız gibi) yerleştirirseniz, sistem ikinci dizeyi parametre olarak geçirerek işlemin yeni bir örneğini çalıştırmayı dener. Dize geçerli bir klasörse, yeni oluşturulan işlemde açılır, değilse yeni işlem hiçbir şey yapmaz.
Her durumda geçersiz klasör yollarının işlem tarafından nasıl ele alındığını bilmiyorum. System.IO.Directory.Exists()
Bunu sağlamak için kullanmak yeterli olmalıdır.
Path.DirectorySeparatorChar
. Aksi takdirde, aynı ada sahip .cmd
veya / .exe
veya muhtemelen diğer soneklere sahip bir klasör de varsa, Explorer bu diğer klasöre açılır - veya bunlar aslında yürütülebilir veya komut dosyalarıysa, klasörü istediğiniz gibi açmak yerine çalıştırır.
ProcessStartInfo örneği alan yöntemin aşırı yüklenmiş bir sürümünü kullanın ve ProcessWindowStyle özelliğini sizin için çalışan bir değere ayarlayın.
İşaret sizin için bunu yaptığında ters eğik çizgiden kaçıyorsunuz.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Bu kod VS2010 ortamından iyi çalışır ve yerel klasörü düzgün bir şekilde açar, ancak aynı uygulamayı IIS'de barındırır ve açmaya çalışırsanız, kesinlikle başarısız olur.
Sadece bu sorunu yaşadım ve nedenini öğrendim. benim neden isnt burada listelenen kimse bu sorunu alır ve bu hiçbiri bunu düzeltmek.
Visual Studio'yu başka bir kullanıcı olarak çalıştırır ve Process.Start'ı kullanmaya çalışırsanız, bu kullanıcı bağlamında çalışır ve ekranınızda görmezsiniz.
Garip.
Explorer.exe bulamazsa, bir istisna almalısınız. Klasörü bulamıyorsa, yine de bir klasör açmalıdır (örn. Belgelerim)
Görev yöneticisinde başka bir Explorer kopyası göründüğünü söylüyorsunuz, ancak göremiyorsunuz.
Ekran dışında (yani başka bir monitör) açılması mümkün mü?
Yoksa bunu hiç etkileşimli olmayan bir hizmette yapıyor musunuz?
Başlat menünüzden "explorer.exe c: \ teste" komutunu çalıştırdığınızda doğru açılıyor mu? Ne zamandır bunu deniyorsun? Makinem çok fazla işlem olduğunda ve yeni bir işlem açtığımda (set IE diyor) benzer bir davranış görüyorum .. görev yöneticisinde başlıyor ama ön uçta görünmüyor. Yeniden başlatmayı denediniz mi?
Aşağıdaki kod yeni bir explorer örneği açmalıdır
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
Bunu denediğinizde çalışan birçok uygulamanız var mı? Bazen işimde garip davranışlarla karşılaşıyorum çünkü sistemimde çok fazla pencere açık olduğu için GDI Handles yetersiz kalıyor (uygulamalarımız çok kullanıyor).
Bu olduğunda, bazı GDI tutamaçlarını serbest bırakmak için bir şeyi kapatana kadar pencereler ve bağlam menüleri artık görünmez.
XP ve Vista'daki varsayılan sınır 10000'dir. DevStudio'mun 1500 GDI tanıtıcısına sahip olması nadir değildir, bu nedenle Dev stüdyosunun birkaç kopyası açıksa, bunları oldukça hızlı bir şekilde yiyebilir. Her işlem tarafından kaç tanıtıcı kullanıldığını görmek için TaskManager'a bir sütun ekleyebilirsiniz.
Sınırı artırmak için yapabileceğiniz bir kayıt defteri çimdik ayarı var.
Daha fazla bilgi için bkz. Http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Sadece yolu değiştirin veya string