기본 응용 프로그램 및 매개 변수가있는 C # 파일 열기


103

기본 응용 프로그램으로 파일을 여는 가장 쉬운 방법은 다음과 같습니다.

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

그러나 정해진 페이지 번호로 pdf를 열고 싶기 때문에 기본 응용 프로그램에 매개 변수를 설정하는 방법이 있는지 알고 싶습니다.

새 프로세스를 만들고 매개 변수를 설정하는 방법을 알고 있지만 이렇게하면 응용 프로그램의 경로를 표시해야하며 이식 가능한 응용 프로그램을 원하며 매번 응용 프로그램의 경로를 설정할 필요가 없습니다. 다른 컴퓨터에서 응용 프로그램을 사용합니다. 내 생각은 컴퓨터에 pdf 리더가 설치되어 있고 페이지를 열어야 할 내용 만 말할 것으로 예상하는 것입니다.

감사.


전체 경로를 사용하지 않고 pdf 파일이 아닌 Adobe 실행 파일로 매개 변수를 전송한다는 의미입니까?
Bali C

2
이것이 어떻게 작동 할 것으로 기대합니까? 응용 프로그램의 경로를 모르는 경우 기본 PDF 뷰어가 무엇인지 모르고 어떤 매개 변수 형식을 사용할지 모릅니다.
ken2k

2
myProcess.StartInfo.FileName = "Acrobat.exe";응용 프로그램에 대한 전체 경로를 제공하지 않고 말하기에는 충분 하지 않습니까?
daniloquio

1
이것 좀 봐 SO 질문 이 도움이 볼
마크 홀

2
@daniloquio : 요점은 OP가 최종 사용자가 Adobe 파일을 읽기 위해 자신의 컴퓨터에 무엇을 설치했는지 알지 못한다는 것입니다. Acrobat, Acrobat Reader 또는 다른 것일 수 있습니다.
Surfbutler 2012

답변:


43

파일을 기본 응용 프로그램으로 열려면 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();

Reader에서 PDF를 열지 않고 Acrobat으로 열려면 다음과 같이 두 번째 줄을 변경합니다.

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

레지스트리를 쿼리하여 pdf 파일을 열기위한 기본 응용 프로그램을 식별 한 다음 그에 따라 프로세스의 StartInfo에서 FileName을 정의 할 수 있습니다.

자세한 내용은 다음 질문을 따르십시오 . Windows에서 특정 파일 형식을 열기위한 기본 응용 프로그램 찾기


2
+1 또한 레지스트리에서 '.pdf'와 같은 모든 파일 유형과 관련된 응용 프로그램을 찾은 다음 파일 이름 매개 변수에 해당 이름을 넣을 수 있다고 생각합니다. 참조 stackoverflow.com/questions/162331/...
Surfbutler

Adobe Reader를 2 페이지보기로 열 수있는 개방 매개 변수가 있습니까? 누군가가 알고 있다면 정말 유용 할 것입니다. 주변을 둘러 봤지만 아무것도 찾을 수 없습니다.
taki Martillo 2014

18

이것은 가까워 야합니다!

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

1
저건 완벽 해 !
Francois Girard 19

1
이것은 기본 프로그램으로 PDF를 여는 데 도움이되었습니다. 감사합니다!
Smitty-Werben-Jager-Manjenson 19

1
@imgen 질문은 페이지 번호를 매개 변수로 제공하는 것입니다. 이 답변이 그것을 다룹니까?
daniloquio

1
@daniloquio 죄송합니다. 질문을 충분히 읽지 않았습니다.
imgen

2
using 블록으로 감싸는 것을 잊지 마십시오. Process는 IDisposable입니다.
René Carannante

7

xsl 로 연결된 블로그 게시물의 VB 코드 를 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.