"연결 프로그램"파일 대화 상자를 여는 간단한 방법이 있습니까?"파일 열기"대화 상자를 표시하려면 어떻게해야합니까?
답변
이 트릭을한다고 ...
오뎃이 좋은 점하게,하지만var processInfo = new ProcessStartInfo(fileName);
processInfo.Verb = "openas";
Process.Start(processInfo);
- 당신이 이러한 기능을 사용하려는 경우 방법/정확히 모르는이 귀하의 상황에 대한 해답이 될하지 않을 수 있습니다 의미 .
이 답변에 대한 최근 댓글은 처음에 자세하게 설명하지 않았습니다. 에 해당 파일 형식에 대해 이미 open
동사가 정의되어있는 파일을 만들려고하면 문제가 발생합니다. 마찬가지로 동사가 정의되지 않은 파일 open
을 시도하면 문제가 발생합니다. 이 문제는 다음과 같습니다
Win32Exception : 어떤 응용 프로그램이 나는 것을 토마스에게 제안 내 머리 위로 떨어져이 작업
에 대해 지정된 파일과 관련되지 않은에서 이러한 종류의 코드를 사용하기 위해 프로덕션 응용 프로그램을 철저히하고 레지스트리를 확인하거나 주어진 동사로 파일을 열 수 있는지 여부를 알아야합니다. ProcessStartInfo.Verbs
을 고려할 때보 다 간단 할 수 있습니다. fileName
이 설정되면 파일 형식과 관련된 가능한 동사 모음을 제공합니다. 이렇게하면 어떤 파일을 어떻게 처리해야하는지 쉽게 결정할 수 있습니다.
필자가 토마스에게 언급했듯이 애플리케이션에 약간의 복잡성과 지능을 추가해야 할 필요가 있습니다.이 답변은 확실히 포괄적 인 솔루션이 아닙니다.
작동하지 않습니다 ... Win32Exception, "이 작업에 지정된 파일과 관련된 응용 프로그램이 없습니다" –
@ThomasLevesque '기본 프로그램'이없는 경우에만 작동합니다. 정의된다; 말하자면, 'Open with ...''상황에 맞는 메뉴가 나타나면 실패합니다. 단순히 '열기'옵션이있는 알 수없는 파일 유형이라면이 방법이 효과적입니다. 반대의 경우도 마찬가지입니다. 알려진 파일 유형에 대해 'open'동사를 사용하면 기본 프로그램이 시작되지만 알 수없는 경우이 동일한 예외가 표시됩니다. 그래서, 적절한 응용 프로그램에서 당신은 이것에 대해 철저히하고 싶습니다; 아마도 알려진 파일 유형 repo (레지스트리)에서 조회를 수행하고 시스템에서 제공 한 사실을 열어 보는 방법을 결정할 수 있습니다. –
@ThomasLevesque 실제로 이러한 길이로 갈 필요조차 없습니다 : ['ProcessStartInfo.Verbs'] (http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.verbs (VS.90) .aspx)는'fileName'이 설정되었을 때 파일에 대한 가능한 동사로 채워질 것입니다. 즉'open' 동사가 정의되었는지,'openas'를 사용하지 않는지를 확인할 수 있습니다. 이것은 내가 베팅 한 모든 경우를 포착하지 않으므로 마음대로 자신의 영리함을 추가하십시오. –
에는 shell examples 톤이 있습니다. 어쩌면 예를 들어보고 싶은 기능이 있는지 여부를 확인하기 위해 살펴볼 수 있습니다. 디폴트 프로그램이 표시됩니다 대화와 오픈 정의되지 않은 경우
System.Diagnostics.Process.Start(path);
파일을 사용하여
은, 기본 프로그램으로 openened됩니다. this link
이 ProcExp 일부 리버스 엔지니어링 근무에서 rundll32.exe 명령 줄을 밝혀 : 당신은에이 기능을 사용하는 예를
[DllImport("shell32.dll", SetLastError = true)]
extern public static bool
ShellExecuteEx(ref ShellExecuteInfo lpExecInfo);
:
당신은 기능을 사용할 수 있습니다. Win7에에서 테스트
이using System;
using System.Diagnostics;
using System.IO;
class Program {
static void Main(string[] args) {
ShowOpenWithDialog(@"c:\temp\test.txt");
}
public static void ShowOpenWithDialog(string path) {
var args = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "shell32.dll");
args += ",OpenAs_RunDLL " + path;
Process.Start("rundll32.exe", args);
}
}
, 나는이 다른 버전의 Windows에서 작동 얼마나 잘 추측 할 수 있습니다 : 여기를 사용하는 샘플 프로그램입니다.
@ 한스 감사합니다! 나는 한동안 수풀 주위를 때리고 있었고 이것은 내가 필요로하는 것이다. shell32.dll의 전체 경로를 사용하지 않았습니다. – tehDorf
OpenAs_RunDLL은 문서화되지 않았기 때문에 [항상 작동하지는 않습니다.] (http://stackoverflow.com/questions/23566667/rundll32-shell32-dll) –
- 1. div를 표시하려면 체크 상자를
- 2. 파일 확장자없이 짧은 URL을 표시하려면 어떻게해야합니까?
- 3. 내 WiFi에 연결된 모든 기기에 팝업 대화 상자를 표시하려면 어떻게해야합니까?
- 4. 마우스 오버시 드롭 다운 목록으로 텍스트 상자를 표시하려면 어떻게해야합니까?
- 5. CALL이 android에서 처리되기 전에 선택하는 대화 상자를 표시하려면 어떻게해야합니까?
- 6. 레지스트리 키의 사용 권한을 설정할 수있는 대화 상자를 표시하려면 어떻게해야합니까?
- 7. Windows Mobile 앱에 모달 대화 상자를 표시하려면 어떻게해야합니까?
- 8. Bing Maps 7.0을 사용하여지도 상자 외부에 정보 상자를 표시하려면 어떻게해야합니까?
- 9. 속성 페이지를 항상 표시하려면 어떻게해야합니까?
- 10. 줌라에 모듈을 표시하려면 어떻게해야합니까?
- 11. 보석으로 업데이트를 표시하려면 어떻게해야합니까?
- 12. 루비에 googlechart를 표시하려면 어떻게해야합니까?
- 13. div에 Colorbox를 표시하려면 어떻게해야합니까?
- 14. 뷰백을 html로 표시하려면 어떻게해야합니까?
- 15. 'hg com'중에 diff를 표시하려면 어떻게해야합니까?
- 16. 함수에서 사용자 지정 대화 상자를 표시하려면 어떻게합니까?
- 17. 콘텐츠가 포함되지 않은 인라인 상자를 표시하려면 어떻게합니까?
- 18. 최상위 창없이 경고 상자를 표시하려면 어떻게합니까?
- 19. Javascript의 PDF에 대해 다운로드/열기 대화 상자를 표시하려면 어떻게합니까?
- 20. PHP 파일을 제대로 표시하려면 어떻게해야합니까?
- 21. Perl에서 열린 폴더 선택 대화 상자를 표시하려면 어떻게합니까?
- 22. "알림"상자를 사라지게하려면 어떻게해야합니까?
- 23. iPhone에서 이미지를 강조 표시하려면 어떻게해야합니까?
- 24. Scintilla에서 텍스트를 강조 표시하려면 어떻게해야합니까?
- 25. 자바 스크립트로 알림을 표시하려면 어떻게해야합니까?
- 26. 세션? 사용자 행을 표시하려면 어떻게해야합니까?
- 27. Drupal에서 hierachial 페이지를 표시하려면 어떻게해야합니까?
- 28. 핀 스트라이프 배경을 표시하려면 어떻게해야합니까?
- 29. 키보드 상단에 하위보기를 표시하려면 어떻게해야합니까?
- 30. 안드로이드에서 스타일을 굵게 표시하려면 어떻게해야합니까?
Winforms? WPF? Webforms? MVC? – Oded
CodeProject에는 Google을 검색 할 때 최상위 기사 인 http://www.codeproject.com/KB/shell/openwith.aspx가 있습니다. 그러나, 나는 externs (processStartInfo 아마도, 아마도?)에 의지보다는 이것을하는 더 예쁜 방법을보고 싶다. –
http://stackoverflow.com/a/32153874/5306861 – codeDom