2010-06-26 3 views
4

나는 윈도우 7 (64)와 델파이 2010WOW64 비애 (.LNK 바로 가기)

를 사용하고 난 시작 메뉴를 에뮬레이션하는 구성 요소를 쓰고 있어요. 그러나, 나는 다음과 같은 문제로 실행했습니다 : 나는 ShellExecute로 바로 가기 (.LNK 파일)을 열려고하면 % 바로 가기의 대상 경로의 일부 %의의 ProgramFiles 때마다

  1. 이 실패합니다 그러면 C : \ Program Files (x86) 폴더 대신 C : \ Program Files 폴더가 표시됩니다.
  2. ShGetFileInfo% ProgramFiles %이 아이콘 파일의 경로에 속하는 경우 (위에서와 동일한 문제) 시스템 이미지 목록에서 아이콘의 올바른 색인을 추출하지 못합니다.

위의 문제를 해결할 수있는 방법이 있습니까? 아니면이 기능이 작동하도록 원시 64 비트 Delphi가 제공 될 때까지 기다려야합니까?

답변

2

나는 Wow64DisableWow64FsRedirectionWow64RevertWow64FsRedirection aftyer 앞에 전화해야한다고 생각합니다.

+0

좋아, 이것은 매우 성가신 일입니다.Wow64DisableWow64FsRedirection은 초기 문제를 해결하지 못하지만 % windir %가 경로 이름의 일부로 사용될 때마다 문제를 해결합니다. 하나는 이것이 모든 환경 변수를 조정/리다이렉션 할 것이라고 기대할 것입니다! –

+0

나는 그것이 효과가 있다고 생각하지 않는다. 그렇게하면 리다이렉션을 사용할 수 없기 때문에 Wow64 프로그램의 c : \ windows \ system32 (예를 들어) 액세스가 커버 아래에서 c : \ windows \ syswow64로 리디렉션되지 않습니다. 내가 아는 한, 이것은 환경 변수에 도움이되지 않습니다. 네이티브 64 비트로 컴파일하거나 직접 환경 변수를 처리해야합니다. – Luke

+0

Ok, SetEnvironmentVariable ('ProgramFiles', 'C : \ Program Files') ShGetFileInfo에 대한 문제를 해결할 수 있지만 문제는 여전히 ShellExecute에 남아 있습니다. –

1

좋아, 문제를 보여주는 작은 예제입니다.

I는 다음 매개 변수에서 ShellExecute 호출 : 인터넷 익스플로러 (64 비트)의 대상을 .LNK
ShellExecute(Handle, 'open', 'C:\Users\...\Internet Explorer (64-bit).lnk', nil, nil, SW_SHOWNORMAL); 

이다 : 그러나

C:\Program Files\Internet Explorer\iexplore.exe 

, 32 비트 버전 그럼에도 불구하고 iexplore.exe이 열립니다. 이 경우 경로도 그래서 어떻게 든 ShellExecuteC를 변환합니다, 퍼센트의의 ProgramFiles %의를 사용하지 않습니다 : \ 프로그램 파일에 C : \ 프로그램 파일 (86) 내부. 나는 그 대신에 iexplore.exe의 64 비트 버전을 여는 방법을 모른다.

Wow64DisableWow64FsRedirection을 호출 한 후 또 다른 문제가 발생하면 ShellExecute은 더 이상 폴더를 열지 않습니다.

+0

이것은 질문에 대한 대답이 아닌 * 답입니다. 대신 질문에 세부 정보를 추가하십시오. –

+0

죄송합니다. 새로 등록되었습니다. 내 계정에 openid를 추가했을 때 질문을 게시 할 때 사용한 ID를 잃어 버렸습니다 ... –

+1

이 문제에 대한 추가 정보는 여기를 참조하십시오. http://stackoverflow.com/questions/386715/launching-shell-links-lnks-from-wow64 – Tobbe

1

다음 환경 변수는 항상 64 비트 시스템에서 오른쪽 방향으로 가리킬 것이고, 32 비트 시스템에 정의되지 않을 것이다 : 32 비트 아키텍쳐의 32 비트 쉘에서

:

,617 : 64 비트 쉘

C:\>echo %processor_architecture% 
x86 
C:\>echo %programfiles(x86)% 
C:\Program Files (x86) 
C:\>echo %programw6432% 
C:\Program Files 
C:\>echo %programfiles% 
C:\Program Files (x86) 

: 64 비트 아키텍쳐의 32 비트 쉘

C:\>echo %processor_architecture% 
x86 
C:\>echo %programfiles(x86)% 
%programfiles(x86)% 
C:\>echo %programw6432% 
%programw6432% 
C:\>echo %programfiles% 
C:\Program Files 

C:\>echo %processor_architecture% 
AMD64 
C:\>echo %programfiles(x86)% 
C:\Program Files (x86) 
C:\>echo %programw6432% 
C:\Program Files 
C:\>echo %programfiles% 
C:\Program Files 

응용 프로그램을 실행하기 전에 대체하십시오.