c # เปิดไฟล์ด้วยแอปพลิเคชันและพารามิเตอร์เริ่มต้น


107

วิธีที่ง่ายที่สุดในการเปิดไฟล์ด้วยแอปพลิเคชันเริ่มต้นคือ:

System.Diagnostics.Process.Start(@"c:\myPDF.pdf");

อย่างไรก็ตามฉันต้องการทราบว่ามีวิธีตั้งค่าพารามิเตอร์เป็นแอปพลิเคชันเริ่มต้นหรือไม่เพราะฉันต้องการเปิด pdf ในหมายเลขหน้าที่กำหนด

ฉันรู้วิธีที่จะสร้างกระบวนการใหม่และตั้งค่าพารามิเตอร์ แต่วิธีนี้ฉันต้องระบุเส้นทางของแอปพลิเคชันและฉันต้องการมีแอปพลิเคชันแบบพกพาและไม่ต้องกำหนดเส้นทางของแอปพลิเคชันในแต่ละครั้ง ฉันใช้แอปพลิเคชันในคอมพิวเตอร์เครื่องอื่น ความคิดของฉันคือฉันคาดหวังว่าคอมพิวเตอร์ได้ติดตั้งโปรแกรมอ่าน pdf และบอกเฉพาะสิ่งที่จะเปิดหน้าเท่านั้น

ขอบคุณ.


คุณหมายถึงส่งพารามิเตอร์ไปยังไฟล์ปฏิบัติการ Adobe แทนที่จะเป็นไฟล์ pdf แต่ไม่ใช้เส้นทางแบบเต็มหรือไม่?
Bali C

2
คุณคาดหวังว่าจะได้ผลอย่างไร หากคุณไม่ทราบเส้นทางของแอปพลิเคชันคุณไม่ทราบว่าโปรแกรมดู PDF ใดเป็นค่าเริ่มต้นและคุณไม่รู้ว่าจะใช้รูปแบบพารามิเตอร์ใด
ken2k

2
ไม่เพียงพอที่จะพูดmyProcess.StartInfo.FileName = "Acrobat.exe";โดยไม่ให้เส้นทางเต็มไปยังแอปพลิเคชัน?
daniloquio

1
ลองดูคำถาม SOนี้เพื่อดูว่าช่วยได้
Mark Hall

2
@daniloquio: ฉันคิดว่าประเด็นคือ OP ไม่ทราบว่าผู้ใช้ปลายทางได้ติดตั้งอะไรลงในเครื่องของตนเพื่ออ่านไฟล์ Adobe ด้วยอาจเป็น Acrobat, Acrobat Reader หรืออย่างอื่นก็ได้
Surfbutler

คำตอบ:


46

หากคุณต้องการให้เปิดไฟล์ด้วยแอปพลิเคชันเริ่มต้นฉันหมายถึงหากไม่ระบุ Acrobat หรือ Reader คุณจะไม่สามารถเปิดไฟล์ในหน้าที่ระบุได้

ในทางกลับกันถ้าคุณโอเคกับการระบุ Acrobat หรือ Reader โปรดอ่านต่อไป:


คุณสามารถทำได้โดยไม่ต้องบอกเส้นทาง Acrobat แบบเต็มเช่นนี้:

Process myProcess = new Process();    
myProcess.StartInfo.FileName = "acroRd32.exe"; //not the full application path
myProcess.StartInfo.Arguments = "/A \"page=2=OpenActions\" C:\\example.pdf";
myProcess.Start();

หากคุณไม่ต้องการให้ pdf เปิดด้วย Reader แต่ใช้ Acrobat ให้ไล่บรรทัดที่สองดังนี้:

myProcess.StartInfo.FileName = "Acrobat.exe";

คุณสามารถสอบถามรีจิสทรีเพื่อระบุแอปพลิเคชันเริ่มต้นเพื่อเปิดไฟล์ pdf จากนั้นกำหนด FileName บน StartInfo ของกระบวนการของคุณตามนั้น

ทำตามคำถามนี้เพื่อดูรายละเอียดในการดำเนินการดังกล่าว: การค้นหาแอปพลิเคชันเริ่มต้นสำหรับการเปิดไฟล์ประเภทใดประเภทหนึ่งบน Windows


2
+1 นอกจากนี้ฉันคิดว่าเป็นไปได้ที่จะค้นหาแอปพลิเคชันที่เกี่ยวข้องกับไฟล์ประเภทใดก็ได้เช่น ".pdf" ในรีจิสทรีจากนั้นใส่ชื่อนั้นในพารามิเตอร์ชื่อไฟล์ ดูstackoverflow.com/questions/162331/…
Surfbutler

มีพารามิเตอร์เปิดเพื่อให้ Adobe reader เปิดในมุมมอง 2 หน้าหรือไม่ แค่อยากรู้ว่าถ้ามีคนรู้นั่นจะเป็นประโยชน์จริง ฉันมองไปรอบ ๆ แต่ไม่พบอะไรเลย
taki Martillo

23

น่าจะใกล้แล้ว!

public static void OpenWithDefaultProgram(string path)
{
    Process fileopener = new Process();
    fileopener.StartInfo.FileName = "explorer";
    fileopener.StartInfo.Arguments = "\"" + path + "\"";
    fileopener.Start();
}

1
ที่สมบูรณ์แบบ!
Francois Girard

1
สิ่งนี้ใช้ได้ผลสำหรับฉันในการเปิด PDF ด้วยโปรแกรมเริ่มต้น ขอบคุณ!
Smitty-Werben-Jager-Manjenson

1
@imgen คำถามเกี่ยวกับการระบุหมายเลขหน้าเป็นพารามิเตอร์ คำตอบนี้ครอบคลุมหรือไม่?
daniloquio

1
@daniloquio ขออภัยฉันอ่านคำถามไม่ลึกพอ
imgen

3
อย่าลืมห่อไว้ในบล็อกการใช้งานกระบวนการสามารถใช้งานได้
René Carannante

7

ฉันแปลงรหัส VB ​​ในบล็อกโพสต์ที่เชื่อมโยงโดยxslเป็น C # และแก้ไขเล็กน้อย:

public static bool TryGetRegisteredApplication(
                     string extension, out string registeredApp)
{
    string extensionId = GetClassesRootKeyDefaultValue(extension);
    if (extensionId == null)
    {
        registeredApp = null;
        return false;
    }

    string openCommand = GetClassesRootKeyDefaultValue(
            Path.Combine(new[] {extensionId, "shell", "open", "command"}));

    if (openCommand == null)
    {
        registeredApp = null;
        return false;
    }

    registeredApp = openCommand
                     .Replace("%1", string.Empty)
                     .Replace("\"", string.Empty)
                     .Trim();
    return true;
}

private static string GetClassesRootKeyDefaultValue(string keyPath)
{
    using (var key = Registry.ClassesRoot.OpenSubKey(keyPath))
    {
        if (key == null)
        {
            return null;
        }

        var defaultValue = key.GetValue(null);
        if (defaultValue == null)
        {
            return null;
        }

        return defaultValue.ToString();
    }
}

แก้ไข - ไม่น่าเชื่อถือ ดูหาโปรแกรมประยุกต์เริ่มต้นสำหรับการเปิดไฟล์ประเภทโดยเฉพาะอย่างยิ่งบน Windows


3

คุณสามารถลองใช้

Process process = new Process();
process.StartInfo.FileName = "yourProgram.exe";
process.StartInfo.Arguments = ..... //your parameters
process.Start();

-5

โปรดเพิ่มการตั้งค่าภายใต้คุณสมบัติสำหรับโครงการและใช้ประโยชน์จากสิ่งเหล่านี้ด้วยวิธีนี้คุณจะมีการตั้งค่าที่ง่ายและสะอาดซึ่งสามารถกำหนดค่าเป็นค่าเริ่มต้นได้

วิธีการ: สร้างการตั้งค่าใหม่ในเวลาออกแบบ

อัปเดต: หลังจากแสดงความคิดเห็นด้านล่าง

  1. ขวา + คลิกที่โครงการ
  2. เพิ่มรายการใหม่
  3. ภายใต้รายการ Visual C # -> ทั่วไป
  4. เลือกไฟล์การตั้งค่า

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