2010-04-16 8 views
0

도움말 파일의 경로 이름에 가상화 된 폴더 이름이 포함되어 있으면 ShowHelp가 Vista 및 Windows Server 2008에서 실패하는 것으로 나타납니다. 예를 들어, 독일어 버전 Vista에서는 "프로그램 파일"을 "프로그램"이라고합니다. ShowHelp를 Vista의 가상화 된 "Program Files"폴더와 함께 사용하는 방법

System.Windows.Forms.Help.ShowHelp(null, 
    @"C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\spyxx.chm"); 

성공 wheras

System.Windows.Forms.Help.ShowHelp(null, 
    @"C:\Programme\Microsoft Visual Studio 9.0\Common7\Tools\spyxx.chm"); 

실패 호출.

C#에서 파일 경로를 가상화되지 않은 파일 경로로 변환하는 방법이 있다면?

다른 문제가 있습니까? \ 프로그램 실제 폴더 아니다 - 그냥 표시 이름입니다 : C가 있기 때문에

안부

답변

0

이 실패합니다. Vista 및 7에서는 OS 언어와 상관없이 항상이 폴더에 영어 이름이 있습니다.

올바른 방법은 레지스트리를보고 설치된 위치를 확인하는 것입니다. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 9.0에서 InstallDir 키를 찾습니다. 이 파일은 c : \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \와 같을 것입니다. - tou는이 경로를 조작하여 Common7 \ Tools를 대신 사용할 수 있습니다.

즉, 단순히 경로를 하드 코딩하지 마십시오.

의 경우은 프로그램 파일 폴더의 이름을 알고 있어야합니다 (하드 코딩하지 말고 use GetFolderPath with the appropriate parameter).

+0

실제로 위의 "Visual Studio"경로 이름은 문제가 Google 도움말 파일의 버그가 아님을 보여주기위한 예제 일뿐입니다. 저희 프로그램은 설치가 필요 없습니다 (즉, 대상 폴더에 복사 만 가능). 따라서 레지스트리를 사용하여 설치 위치를 결정할 수 없습니다. 설치 위치를 얻으려면 Assembly.Location 또는 유사한 방법에 의존해야합니다. 이러한 메서드는 항상 "Program Files"대신 "Program"을 반환합니다. –

+0

@fmunkert : 그 동작을 재현 할 수 없습니다. 테스트 응용 프로그램을 만들고 Assembly.GetExecutingAssembly()를 인쇄합니다. Location은 Explorer에 표시되는 현지화 된 이름이 아니라 영어 이름을 제공합니다.이 이름은 지역화 된 파일을 표시하려는 경우 Windows API를 사용해야하기 때문에 *해야합니다 * 진짜 이름 대신 이름. –

관련 문제