ฉันเห็นหัวข้ออื่นและฉันมีปัญหาอื่น กระบวนการเริ่มต้น (เห็นที่ตัวจัดการงาน) แต่โฟลเดอร์ไม่เปิดบนหน้าจอของฉัน เกิดอะไรขึ้น
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
ฉันเห็นหัวข้ออื่นและฉันมีปัญหาอื่น กระบวนการเริ่มต้น (เห็นที่ตัวจัดการงาน) แต่โฟลเดอร์ไม่เปิดบนหน้าจอของฉัน เกิดอะไรขึ้น
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
คำตอบ:
คุณแน่ใจแล้วว่ามีโฟลเดอร์ " c:\teste
" อยู่หรือไม่ หากไม่เป็นเช่นนั้น Explorer จะเปิดขึ้นเพื่อแสดงโฟลเดอร์เริ่มต้นบางส่วน (ในกรณีของฉัน " 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");
หากไม่มีสิ่งใด (ดียกเว้นสิ่งที่ส่งข้อยกเว้น) ทำงานบนคอมพิวเตอร์ของคุณฉันไม่คิดว่าปัญหาจะอยู่ในรหัส แต่ในสภาพแวดล้อม หากเป็นกรณีนี้ฉันจะลองทำอย่างใดอย่างหนึ่งต่อไปนี้
Process.Start(path)
เปิดใช้งานหน้าต่าง (อาจกะพริบในทาสก์บาร์เท่านั้นไม่ใช่มาที่ด้านหน้า); explorer.exe
พารามิเตอร์ + เปิดหน้าต่างใหม่เสมอที่ด้านหน้า (แต่หลายครั้งในหน้าต่างเดียวกัน) ดังนั้นทั้งสองมีข้อแม้
Process.Start(@"c:\temp")
จะต้องใช้ด้วยความระมัดระวัง หากc:\temp.com
มีอยู่แล้วการเรียกใช้ฟังก์ชันจะเปิดc:\temp.com
แทน ดูForums.iis.net/p/1239773/2144186.aspxสำหรับรายละเอียดเพิ่มเติม
Process.Start(@"c:\temp")
เป็นที่ประทับใจกับการเปิดโฟลเดอร์ที่แตกต่างกันเช่นหรือC:\temp.exe
C:\temp.cmd
ดูปัญหานี้ที่ VS ตัวเองแสดงพฤติกรรมรถ คุณสามารถหลีกเลี่ยงปัญหานี้โดยใช้explorer.exe
ตัวแปรหรือ (ดีกว่า IMO) Path.DirectorySeparatorChar
เสมอท้าย ตัวอย่างเช่นProcess.Start(@"C:\temp\")
.
เพื่อความสมบูรณ์ถ้าคุณต้องการเปิดโฟลเดอร์ใช้สิ่งนี้:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
ตรวจสอบให้แน่ใจว่า FileName ลงท้ายด้วยPath.DirectorySeparatorChar
เพื่อให้ชี้ไปที่โฟลเดอร์อย่างไม่น่าสงสัย (ขอบคุณ @binki)
วิธีนี้จะไม่ทำงานเมื่อเปิดโฟลเดอร์และเลือกรายการเนื่องจากดูเหมือนจะไม่มีคำกริยาสำหรับสิ่งนั้น
C:\teste.exe
หรือC:\teste.cmd
มีอยู่ Explorer จะเปิดไปยังโฟลเดอร์อื่นแทนโฟลเดอร์ที่คุณต้องการ เพื่อหลีกเลี่ยงนี้คุณสามารถผนวกPath.DirectorySeparatorChar
ไปยังเส้นทาง ดูว่า VS ตัวเองทำผิดพลาดแบบเดียวกันได้อย่างไร
Verb = "select"
แต่ก็ไม่สามารถทำได้ คำตอบยอดเยี่ยม!
Verb = "open"
ไม่จำเป็นต้องตั้งค่า (ทดสอบใน Windows, ระบบปฏิบัติการอื่นอาจแตกต่างกัน)
.Verbs
คุณสมบัติในวันที่ProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/ ...... )
หากคุณต้องการเลือกไฟล์หรือโฟลเดอร์คุณสามารถใช้สิ่งต่อไปนี้:
Process.Start("explorer.exe", "/select, c:\\teste");
/select
เป็น/open
คุณกำลังใช้สัญลักษณ์ @ ซึ่งช่วยลดความจำเป็นในการหลบหลีกแบ็กสแลชของคุณ
ลบเครื่องหมาย @ หรือแทนที่ \\ ด้วย \
คุณไม่ต้องการแบ็กสแลชสองครั้งเมื่อใช้สตริงที่ไม่ใช้ค่า Escape
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
คุณควรใช้System.Diagnostics.Process.Start()
โอเวอร์โหลดอย่างใดอย่างหนึ่ง มันค่อนข้างง่าย!
หากคุณไม่ได้วางชื่อไฟล์ของกระบวนการที่คุณต้องการเรียกใช้ ( explorer.exe
) ระบบจะรับรู้ว่าเป็นเส้นทางโฟลเดอร์ที่ถูกต้องและพยายามแนบกับกระบวนการ Explorer ที่รันอยู่ ในกรณีนี้ถ้าโฟลเดอร์เปิดอยู่แล้ว Explorer จะไม่ทำอะไรเลย
หากคุณวางชื่อไฟล์ของกระบวนการ (ตามที่คุณทำ) ระบบจะพยายามเรียกใช้อินสแตนซ์ใหม่ของกระบวนการผ่านสตริงที่สองเป็นพารามิเตอร์ หากสตริงเป็นโฟลเดอร์ที่ถูกต้องสตริงนั้นจะถูกเปิดในกระบวนการที่สร้างขึ้นใหม่หากไม่มีกระบวนการใหม่จะไม่ทำอะไรเลย
ฉันไม่ทราบว่ากระบวนการโฟลเดอร์เส้นทางที่ไม่ถูกต้องได้รับการปฏิบัติอย่างไร การใช้System.IO.Directory.Exists()
ควรเพียงพอเพื่อให้มั่นใจว่า
Path.DirectorySeparatorChar
อย่าลืมว่าคุณจะต้องผนวก มิฉะนั้นหากโฟลเดอร์ที่มีชื่อเดียวกัน แต่.cmd
หรือ.exe
หรืออาจมีคำต่อท้ายอื่น ๆ อยู่ Explorer จะเปิดไปยังโฟลเดอร์อื่นนั้น - หรือถ้าเป็นโฟลเดอร์ที่เรียกใช้งานได้จริงหรือสคริปต์โฟลเดอร์จะเรียกใช้แทนการเปิดโฟลเดอร์ตามที่คุณต้องการ
ใช้เวอร์ชันที่โอเวอร์โหลดของเมธอดที่รับอินสแตนซ์ ProcessStartInfo และตั้งค่าคุณสมบัติ ProcessWindowStyle เป็นค่าที่เหมาะกับคุณ
คุณกำลังหลบหลีกแบ็กสแลชเมื่อเครื่องหมาย at ทำเพื่อคุณ
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
รหัสนี้ทำงานได้ดีจากสภาพแวดล้อม VS2010 และเปิดโฟลเดอร์ในเครื่องอย่างถูกต้อง แต่ถ้าคุณโฮสต์แอปพลิเคชันเดียวกันใน IIS และลองเปิดแล้วมันจะล้มเหลวอย่างแน่นอน
ฉันเพิ่งมีปัญหานี้และฉันพบว่าทำไม เหตุผลของฉันไม่อยู่ในรายการที่นี่ดังนั้นใครก็ตามที่ได้รับปัญหานี้และไม่สามารถแก้ไขได้
หากคุณเรียกใช้ Visual Studio ในฐานะผู้ใช้รายอื่นและพยายามใช้กระบวนการเริ่มต้นระบบจะทำงานในบริบทผู้ใช้นั้นและคุณจะไม่เห็นมันบนหน้าจอ
แปลก.
หากไม่พบ explorer.exe คุณควรได้รับข้อยกเว้น หากไม่พบโฟลเดอร์ก็ควรเปิดบางโฟลเดอร์ (เช่นเอกสารของฉัน)
คุณพูดว่าอีกหนึ่งสำเนาของ Explorer ปรากฏขึ้นใน taskmanager แต่คุณมองไม่เห็น
เป็นไปได้หรือไม่ว่าจะเปิดหน้าจอ (เช่นจอภาพอื่น)?
หรือคุณมีโอกาสทำเช่นนี้ในบริการที่ไม่โต้ตอบหรือไม่?
มันเปิดอย่างถูกต้องเมื่อคุณเรียกใช้ "explorer.exe c: \ teste" จากเมนูเริ่มต้นของคุณหรือไม่ คุณลองมานานเท่าไหร่แล้ว? ฉันเห็นพฤติกรรมที่คล้ายกันเมื่อเครื่องของฉันมีกระบวนการจำนวนมากและเมื่อฉันเปิดกระบวนการใหม่ (ชุดบอกว่า IE) .. มันเริ่มต้นในตัวจัดการงาน แต่ไม่แสดงในส่วนหน้า คุณลองรีสตาร์ทหรือไม่
รหัสต่อไปนี้ควรเปิดอินสแตนซ์ของ explorer ใหม่
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
คุณมีแอปพลิเคชั่นจำนวนมากที่ทำงานอยู่หรือไม่เมื่อคุณลอง ฉันพบพฤติกรรมแปลก ๆ ในที่ทำงานบางครั้งเพราะระบบของฉันไม่มี GDI Handle เนื่องจากมีหน้าต่างเปิดอยู่มากมาย (แอพของเราใช้มาก)
เมื่อสิ่งนี้เกิดขึ้นหน้าต่างและเมนูบริบทจะไม่ปรากฏขึ้นจนกว่าฉันจะปิดบางสิ่งบางอย่างเพื่อเพิ่มการจัดการ GDI
ขีด จำกัด เริ่มต้นใน XP และ Vista คือ 10,000 ไม่ใช่เรื่องแปลกสำหรับ DevStudio ของฉันที่จะมี 1,500 GDI ที่จัดการดังนั้นถ้าคุณมีสำเนาของสตูดิโอ Dev ที่เปิดอยู่สองสามมันสามารถกินมันได้อย่างรวดเร็ว คุณสามารถเพิ่มคอลัมน์ใน TaskManager เพื่อดูจำนวนการใช้งานของแต่ละกระบวนการ
มีการปรับแต่งรีจิสทรีที่คุณสามารถทำได้เพื่อเพิ่มขีด จำกัด
สำหรับข้อมูลเพิ่มเติมดูhttp://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
เพียงแค่เปลี่ยนเส้นทางหรือประกาศใน string