ฉันจะเปิด Windows Explorer ไปยังไดเรกทอรีที่ต้องการจากภายในแอพ WPF ได้อย่างไร


150

ในแอปพลิเคชั่น WPF เมื่อผู้ใช้คลิกที่ปุ่มฉันต้องการเปิด Windows explorer ไปยังไดเรกทอรีหนึ่งฉันจะทำอย่างไร

ฉันคาดหวังอะไรแบบนี้:

Windows.OpenExplorer("c:\test");

คำตอบ:


306

ทำไมProcess.Start(@"c:\test");ล่ะ


9
หมายเหตุ: คุณสามารถใช้สิ่งนี้เพื่อเรียกใช้แอปพลิเคชันอื่นเช่นกัน Process.Start("calc.exe");จะเรียกใช้เครื่องคิดเลข คุณสามารถส่งพา ธ แบบเต็มไปยังไฟล์ที่เรียกทำงานได้และจะเรียกใช้
เจมี่ Penney

1
ฮ่า ๆ ใช่ทำไมไม่ ตลกมีแอพพลิเคชั่นวิ่งเข้ามาในหัวของฉันไม่สามารถไปถึงกระบวนการที่แพร่หลายเริ่มต้นและคิดว่า WPF กำลังเล่นเกมกับฉัน
Abel

9
หมายเหตุ: มันจะโยนข้อยกเว้นถ้ามันไม่ได้มี ลองใช้ Process.Start ("explorer", @ "c: \ test"); หากคุณไม่ต้องการจัดการข้อยกเว้น มันจะเปิดหน้าต่างเริ่มต้น บ่อยครั้งที่มันจะดีกว่าที่จะจัดการกับข้อยกเว้นอย่างไรก็ตาม
รวม

9
ระวังว่าถ้าใครบางคนมุ่งร้าย (หรือเพียงแค่ไม่รู้) สามารถรับสายใด ๆ ที่นั่นพวกเขาจะสามารถรันโปรแกรมใด ๆ @ ข้อเสนอแนะการรวมกันมีความปลอดภัยมากขึ้นมิฉะนั้นให้ตรวจสอบว่าเส้นทางเป็นไดเรกทอรีหรือไม่และมีอยู่ก่อนหน้านี้หรือไม่
Christian Rondeau

3
ความแตกต่างระหว่างStart(dir)และStart("explorer.exe", dir)ก็คือว่าเดิมจะฉลาดพอที่จะมุ่งเน้นหน้าต่างที่มีอยู่สำหรับdirถ้ามีหนึ่งในขณะที่หลังเปิดหน้าต่างใหม่ทุกครั้ง
dlf

13

สิ่งนี้น่าจะใช้ได้:

Process.Start(@"<directory goes here>")

หรือหากคุณต้องการวิธีเรียกใช้โปรแกรม / เปิดไฟล์และ / หรือโฟลเดอร์:

private void StartProcess(string path)
{
    ProcessStartInfo StartInformation = new ProcessStartInfo();

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

จากนั้นเรียกใช้เมธอดและในวงเล็บให้ใส่ไดเรกทอรีของไฟล์และ / หรือโฟลเดอร์ที่นั่นหรือชื่อของแอปพลิเคชัน หวังว่านี่จะช่วยได้!


12

System.Diagnostics.Process.Startคุณสามารถใช้

หรือใช้ WinApi โดยตรงกับสิ่งต่อไปนี้ซึ่งจะเปิด explorer.exe คุณสามารถใช้พารามิเตอร์ตัวที่สี่เพื่อ ShellExecute เพื่อให้มันเป็นไดเรกทอรีเริ่มต้น

public partial class Window1 : Window
{
    public Window1()
    {
        ShellExecute(IntPtr.Zero, "open", "explorer.exe", "", "", ShowCommands.SW_NORMAL);
        InitializeComponent();
    }

    public enum ShowCommands : int
    {
        SW_HIDE = 0,
        SW_SHOWNORMAL = 1,
        SW_NORMAL = 1,
        SW_SHOWMINIMIZED = 2,
        SW_SHOWMAXIMIZED = 3,
        SW_MAXIMIZE = 3,
        SW_SHOWNOACTIVATE = 4,
        SW_SHOW = 5,
        SW_MINIMIZE = 6,
        SW_SHOWMINNOACTIVE = 7,
        SW_SHOWNA = 8,
        SW_RESTORE = 9,
        SW_SHOWDEFAULT = 10,
        SW_FORCEMINIMIZE = 11,
        SW_MAX = 11
    }

    [DllImport("shell32.dll")]
    static extern IntPtr ShellExecute(
        IntPtr hwnd,
        string lpOperation,
        string lpFile,
        string lpParameters,
        string lpDirectory,
        ShowCommands nShowCmd);
}

การประกาศมาจากเว็บไซต์ pinvoke.net


1
ใช่ฉันได้รับข้อผิดพลาดไล่ว่าไม่ทราบเกี่ยวกับ <ตี> ตี </ ตี> BTW เย็น
เอ็ดเวิร์ด Tanguay

1
ซึ่งน่าเสียดายที่ทำงานได้เฉพาะในคำตอบ / คำถาม แต่ไม่ได้อยู่ในความคิดเห็น ;-) ฉันเพิ่งปรับปรุง
Abel

+1 ฉันจะใช้รหัสนี้เพื่อเปิดแอปอื่น ๆ แต่กระบวนการเริ่มต้น () คือสิ่งที่ฉันต้องการ
Edward Tanguay

นั่นคือสิ่งที่เกิดขึ้นเมื่อคุณพยายามตอบคำถาม ตี 3: คุณคิดถึง ;-) ชัดเจน อย่างไรก็ตามฉันจำได้ว่าฉันมักใช้ ShellExecute เมื่อ Process.Start ไม่ใช่สิ่งที่ฉันต้องการ (มีบางสถานการณ์ที่ไม่สามารถจัดการได้)
Abel

สิ่งที่คุณ (ภายในสองประโยคแรก) กล่าวว่าทำงานได้จากแอปพลิเคชัน winforms, Application.Run ("explorer.exe") ไม่ทำงาน เพราะแอพพลิเคชั่น
รัน

12
Process.Start("explorer.exe" , @"C:\Users");

ฉันต้องใช้สิ่งนี้วิธีอื่นเพียงระบุ tgt dir จะปิดหน้าต่าง explorer เมื่อใบสมัครของฉันถูกยกเลิก


คำตอบเดียวที่ฉันไม่ได้รับการAccess deniedยกเว้น
Matas Vaitkevicius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.