6
UnhandledException: System.ComponentModel.Win32Exception: No application is associated with the specified file for this operation 
    at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start() 
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start(String fileName) 

안녕하세요 모든 사람과 연결되지 않습니다. 이 상자에 .csv 파일에 대한 파일 연결이 설정되어 있지 않기 때문에이 문제가 발생했다고 생각합니다.어떤 응용 프로그램</p> <p>내가 테스트하고 하나의 시스템에서 다음 예외를 얻고있다 .csv 파일을 열 수 Process.Start를 사용하려고 시도하는 경우에, 지정된 파일 예외

그럼 어떻게 이런 상황을 피하겠습니까?

강제로 Process.Start가 메모장에서 열리시겠습니까? - 이상적으로 Excel에서 열어야합니다. 그러나 Excel이 컴퓨터에 없으면 어떻게해야합니까?

감사

답변

4

응용 프로그램이 제대로 작동하려면 Excel이 설치되어 있는지 여부에 따라 다르면 사용자에게 버그를 알려주십시오. 예외 상황을 파악하고 문제를 알리는 알림을 팝업으로 표시하지만 알림에서 메모장 같은 다른 편집기에서 열 수있는 옵션을 제공합니다.

이 모든 것이 좋은 UX에 달려 있습니다. 사용자에게 알리십시오.하지만 사용자에게 알리십시오. 그런 식으로 약간의 문제가 발생할 때 멈추지 말고 계속할 수있는 옵션을 제공하여 권한을 부여 할 수 있습니다. .

편집 : 당신이하고있는 일을 정확하게 수행하십시오 - Excel이 있다고 가정하지 말고 OpenOffice와 같은 다른 뷰어/편집기가있을 수 있습니다. csv에 등록 된 것이 무엇이든지, 그것을 할 수있게하십시오. 가서 파일 연결을 직접 확인하려고하지 마십시오. 앱이 레지스트리에서 fossicking 할 수있는 충분한 권한을 갖고 있지 않을 수도 있습니다.

사용자가 대상 파일을 열 수있는 권한이없는 것과 같은 다른 명백한 이유를 확인해야합니다. 이는 폴더 나 파일 자체에 대한 제한 때문일 수 있습니다. 파일이 다른 프로세스에서 아직 열려 있기 때문에 잠긴 것일 수 있습니다. Process.Start가 실패 할 수있는 여러 가지 이유가 있습니다.

예외를 찾아 내고 원인이 파일과 관련된 응용 프로그램이 아니면 해당 옵션을 제공하십시오. 사용자가 메모장을 사용하도록 선택한 경우 메모장에서 파일을 열어도 예외가 발생하지 않도록주의하십시오. 메모장은 좋은 옵션입니다, 그것은 파일에 자물쇠를 개최하지 않지만 여전히 폴더/파일 ACL의 대상이됩니다.

+0

그것은 그것에 의존하지 않습니다 -하지만 사용자가 훨씬 더 쉽게 같은 CSV 파일을 읽을 수 있습니다. Excel이 설치되어 있는지 어떻게 확인할 수 있습니까? – baron

+0

내 편집보기 .... – slugster

+0

귀하의 의견은 완벽합니다. 건배 – baron

2

당신이 Process.Start를 수행하기 전에 파일 확장명과 연결된 프로그램이 있는지 확인하기 위해 레지스트리를 읽으십시오. HKEY_CLASSES_ROOT\.csv을보고 해당 파일 확장자를 처리하도록 누가 등록되어 있는지 확인하십시오 (있는 경우).

+0

어떤 것도 연관되지 않은 경우를 볼? 메모장에서 강제로 엽니 다 (이드는 대부분의 XP 박스를 가지고 있다고 가정 할 때 상당히 안전하다고 말합니다) 그리고 연관이있는 앱이 열려 있다면? 잘만되면 레지스트리에서 프로세스 이름을 쉽게 가져올 수 있습니까? ... – baron

+0

파일 형식을 처리하는 데 아무 것도 관련되어 있지 않은 경우 사용자가 수행하는 작업은 사용자가 결정합니다. 메모장을 선택하는 것이 좋습니다. 레지스트리에서 들여다 보면 파일 형식을 처리하기 위해 등록 된 것이 표시되면 Process.Start가 실제로 레지스트리를 해독하는 세부 정보를 처리하게합니다. 열린 동사와 기타 등등. – dthorpe

3

당신은 참 ProcessStartInfo.ErrorDialog = 설정하면 사용자가 표준 Windows 대화 상자에 프롬프트 될 것입니다 : here