2009-03-11 3 views
5

.NET 1.0 일 전 MS Windows에서 바로 가기의 대상을 반환하는 메서드를 작성했습니다. 그것은 개체 모델과 짐승이 COM 인터페이스를 통해 강제 호스팅 Windows 스크립트에 상호 운용성을 사용을 통해 이런 짓을 :COM을 사용하지 않고 C#에서 프로그래밍 방식으로 Windows 파일 시스템 바로 가기를 따르는 방법이 있습니까?

private FileInfo GetFileFromShortcut(FileInfo shortcut) 
{ 
    FileInfo targetFile = null; 

    try 
    { 
     IWshRuntimeLibrary.WshShell wShell = new IWshRuntimeLibrary.WshShellClass(); 
     IWshRuntimeLibrary.WshShortcut wShortcut = (IWshRuntimeLibrary.WshShortcut)wShell.CreateShortcut(shortcut.FullName); 

     // if the file wasn't a shortcut then the TargetPath comes back empty 
     string targetName = wShortcut.TargetPath; 
     if (targetName.Length > 0) 
     { 
      targetFile = new FileInfo(targetName); 
     } 
    } 
    catch (Exception) 
    { // will return a null targetFile if anything goes wrong 
    } 

    return targetFile; 
} 

이 여전히 버그에게 나를, 나는하지만, 더 우아한 뭔가이 찾고 교체 된 경우에만 교체 작업은 실제로 최소한 효과적입니다. 난 아직도 C# 방식으로 바로 가기의 대상을 찾는 방법을 찾을 수 없습니다. 그 중 하나가 있습니까, 아니면 아직도이 유형의 일을하는 가장 좋은 방법입니까?

+0

큰 질문입니다. COM interop없이이 작업을 수행하는 방법에 대해 생각하지 않았습니다. – Sung

+0

불행하게도 이것을 달성하기 위해 관리되지 않는 코드를 통해 셸을 사용하는 것을 피할 수 없었습니다. – RobS

답변

1

누군가가 C#에서 바로 가기 파일을 조작하는 클래스를 작성하여 ShellLink이라고 말한 것처럼 보이지만 COM도 사용합니다.

+0

다른 레이어의 뒤에 COM 활동을 숨기는 것은 내가 원하는 것만은 아니 었습니다.이 코드를 오픈 소스 프로젝트에 게시하고 COM bashing 부분을 좋아하지 않았습니다. 하지만 다른 방법이 없다면 ... –

+1

COM을 사용하고 싶지 않은 이유는 무엇입니까? Ushell IShellLink는 바로 가기 구문 분석/수정을 위해 Windows에서 제공하는 API이므로 작업을 수행하는 올바른 방법입니다. Windows Scripting Host를 사용한 원래 코드는 COM 개체를 사용했기 때문에 스크립팅 언어 용으로 설계된 래퍼 객체를 사용했기 때문에 최선의 방법은 아니 었습니다. COM은 Windows에서 항상 뒤에서 사용됩니다. 그것은 피할 수없는 일입니다. –

1

.lnk 또는 .url 파일을 열어 구문 분석 할 수 없습니까?

이 같은 일에 대해 이야기하고 파일 모양을 보여줍니다 내가 얼마 전에뿐만 아니라이 관심을 가지고 http://www.programmingtalk.com/showthread.php?t=7335

+1

게시 된 정의가없는 파일을 구문 분석하는 것이 프로덕션 코드에서 사용하기를 원하는지 확실하지 않습니다. 최소한 나는 항상 작동한다는 것을 알기 때문에 COM 인터페이스를 두드리는 안전한 해결 방법이 있습니다. –

0

.

여기 LNK 파일 (비공식적 인) description of the format에 대한 링크가 포함 된 response이 허용됩니다. 분명히 모든 사용 가능한 방법은 이며 아직은 일부 API를 사용합니다.

관련 문제