2010-07-08 1 views
11

두 번째 exe를 시작하는 Delphi 2010 exe가 있습니다. 두 번째 exe에는 openDialog.execute를 호출하는 대화 상자가 있습니다. 원격 데스크톱에서 Windows 2008 Enterprise R2를 실행하면 예상대로 실행됩니다 (). 원격 응용 프로그램으로 실행하면 파일 대화 상자가 나타나 자마자 응용 프로그램이 중지되고 모든 응용 프로그램 창이 흰색으로 바뀝니다. 그걸 벗어나는 유일한 방법은 응용 프로그램을 종료하는 것입니다. TOpenDialog를 TFileOpenDialog로 대체하려고 시도했지만 그 결과는 같습니다. 나는 주 응용 프로그램을 시작하는 RDP 파일을 수정하는 방법을 살펴 보았지만 차이를 만들 수있는 매개 변수는 볼 수 없습니다. 전에 이런 종류의 행동을 본 사람 있습니까? 원격 데스크톱 응용 프로그램으로 실행하면 Windows 2008에서 Delphi TOpenDialog이 멈 춥니 다.


2010년 7월 13일

이 간단한 예를 사용하여 재현 할 것이다 업데이트. 이 예제에는 두 개의 실행 파일이 있습니다. 첫 번째는 m_module.exe라는 파일 실행 프로그램입니다. m_module.exe에는 편집, 단추 및 아래 코드가 있습니다.

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    OpenDialog1.execute; 
end; 

첫 번째에게 : 두 번째 실행은 버튼을 아래 코드를 포함

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ShellExecute(Handle, 'open', stringToOLEstr(edit1.text) , nil, nil, SW_SHOWNORMAL) ; 
end; 

procedure TForm1.FormShow(Sender: TObject); 
begin 
    edit1.text:=application.exename; 
end; 

: 나는 발사 버튼을 클릭하기 전에 두 번째 실행에 맞게 편집에 실행 파일의 이름을 변경 모듈은 RDP 파일에서 시작됩니다. 응용 프로그램 폴더에 \ Windows \ System32 폴더에서

thumbcache.dll 
dtsh.dll 
wkscli.dll 

, 문제가 제거 :

2010.07.14

내가 다음 DLL을 복사하면 것을 발견했다

업데이트되었습니다.

TrustedInstaller에서 Administrator 그룹으로 \ Windows \ System32 폴더에있는이 dll의 소유권 및 사용 권한 수준을 변경하면 동일한 결과가 나타납니다. (응용 프로그램 디렉토리에 복사하면 소유권 및 권한이 변경됩니다)

확인하려면 관리자 그룹에서 TrustedInstaller로 소유권 및 사용 권한 수준을 다시 변경하면 오류가 다시 발생했음을 확인했습니다.

그래서 어떤 종류의 액세스 문제가있는 것으로 보입니다. 아마도 이것은 문제의 원인을 발견하는 데 도움이 될 것입니다.

GetWindowsDirectory http://msdn.microsoft.com/en-us/library/ms724454%28VS.85%29.aspx에 대한이 MSDN 기사 터미널 서비스에서 실행중인 응용 프로그램의 몇 가지 흥미로운 동작을 문서화 :

2010년 7월 18일

(엠바 카데로에서 제공) 도움이 될 수있는 몇 가지 추가 정보 업데이트되었습니다. GetWindowsDirectory가 직접 호출되지는 않지만 사용자 별 Windows 시스템 디렉토리의 샌드 박싱은 문제를 일으킬 수 있습니다. 아마도 GetOpenFileNameA에 대한 호출 체인의 DLL 중 하나가 실제 DLL을 샌드 박스 된 DLL 대신 실제 시스템 디렉터리에서 참조하려고하므로 권한 위반이 발생합니다. 그것은 단지 추측이지만 조사할만한 가치가 있습니다.서버에서 SysInternals 프로세스 모니터 또는 프로세스 탐색기를 작동시킬 수 있다면 commdlg32 및 스택 추적의 다른 DLL이로드되는 것을 볼 수 있어야합니다.

모든 기존 응용 프로그램 (터미널 서비스 또는 원격 데스크톱 서비스 용으로 만들어지지 않은 모든 응용 프로그램)은 응용 프로그램 호환성 레이어에서 실행됩니다. 이 MSDN 기사 http://msdn.microsoft.com/en-us/library/cc834995%28VS.85%29.aspx을 참조하십시오. IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 플래그는 Windows.PAS에 정의되어 있습니다. 테스트를 위해 당신이 당신의 응용 프로그램에 윈도우를 추가하여 응용 프로그램의 PE 헤더에 추가 할 수 있습니다 섹션을 사용하여 오른쪽 용도 섹션 넣어 미만 :

이 호환성을 우회하는 응용 프로그램의 원인이됩니다 {$ SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}

층. 현재 스폰 된 프로세스 (예 : 두 번째 exe)가 RDS에 정의 된 응용 프로그램의 모든 권한 및 설정을 보유하고 있는지 조사 중입니다.

+0

두 번째 응용 프로그램을 직접 시작하면 작동합니까? –

+0

해당 컴퓨터의 여러 모니터가 문제가됩니까? Open Dialog가 Remote Desktop Window가 아닌 ​​Second Monitor 영역에서 열리는 것 같습니다. -Alt-Space-M-을 누른 다음 화살표 키를 사용하여 대화 상자를 다시보기로 이동하십시오. –

+0

madExcept가 EAccessViolation을보고합니다. 이것이 hang과 어떻게 관련되어 있는지 설명해 주시겠습니까? – Alex

답변

2

Windows는 thumbcache.dll 모듈의 AV (c0000005)를보고합니다.

나는 thumbcache.dll이 파일에 대한 축소판을 작성/캐싱과 관련이 있다고 생각합니다. 축소 이미지를 작성하는 것은 익스플로러에 대한 타사 확장을 사용하는 것을 의미 할 수 있습니다. 익스플로러는 RDP와 잘 작동하지 않을 수 있습니다.

깨끗한 시스템에서 사용해보십시오. 테스트 구성을 설정하려면 VMWare 또는 유사한 가상 시스템을 사용하십시오.

P. 이 기사도 참조하십시오 : How to debug application’s hang?하지만 저는 교수형이 귀하의 경우 다른 문제의 결과라고 생각합니다.

+0

그의 모든 업데이 트로, 전체 그림이 명확하지 보이지 않습니까? 필자는이 대답을 편집하여 Windows Terminal Server Application Compatibility Layer에 대한 참조와 표준 TFileOpen 대화 상자에 미치는 영향을 편집해야한다고 생각합니다. 'explorer.exe'및 Bill 자신이로드하지 않은 'thumbcache.dll'을 포함하는 하위 구성 요소 표준 Windows 파일 대화 상자에 의해로드되었습니다. –

0

Process Explorer 도구를 사용하여 프로세스 속성을 보는 것이 좋습니다. 정확히 어떤 DLL이 두 경우에로드되는지 확인하십시오 (프로세스를 선택하고 모듈보기에서 하위 창을 열어서 수행 할 수 있습니다).

Process Monitor 도구를 사용하여 프로세스 시작을 모니터링하고 (두 경우 모두 다시) 문제의 DLL에 대한 참조를 볼 수도 있습니다.

2

FWIW와 비슷한 상황이지만 보안상의 이유로 충돌이 발생하지는 않습니다. Citrix를 통해 앱을 실행할 때 일반 창을 "열어"또는 "다른 이름으로 저장"대화 상자를 표시하는 것을 금지합니다. 그래서 우리는 우리 자신을 굴렸다. 드라이브 문자 (로컬 드라이브 만), 폴더 선택기 (승인 된 드라이브로 제한), 파일 이름 선택기 및 파일 이름 편집 상자의 콤보가 있습니다.

우리에게 이것은 활성 디렉토리 문제를 해결하고 보안을 행복하게 유지합니다. 또한 사용자가 파일을 파일 시스템에 저장하지 못하게하거나 파일 시스템에 저장하지 못하게합니다.

샌드 박스에서 실행되지 않는 경우 일반 Windows 파일 대화 상자를 표시합니다. 래퍼 (wrapper) 함수를 사용하여 어디서나 호출하고 "샌드 박스 대 윈도우"결정을 한 자리에서 수행 할 수 있습니다.

0

문제가 특정 종류의 액세스 문제로 좁혀 졌으므로 다음 설명이 도움이되지 않습니다. http://social.technet.microsoft.com/Forums/en-US/winserverTS/thread/0a88919f-2d72-4340-abd7-fbe0e9545f25/

분명히 Z 순서를 :하지만 거기하여 RemoteApp에 팝업 창에 문제가 존재하는 것 같다 나는 그것이 비슷한 문제로 (적어도 이론적으로) 될 수 있다는 것을 상상할 수 나는 그것을 언급하고 싶은 이유, 그건 의 Windows가 RemoteApp를 사용할 때 항상 올바른 것은 아닙니다. 귀하의 경우에는 TOpenDialog가 모달 팝업 창이어야합니다. 이 버그로 인해 TOpenDialog가 백그라운드에서 나타날 수 있다고 상상할 수 있습니다. 주 창은 전경에 남아 있지만 TOpenDialog는 모달이므로 비활성화됩니다. 그런 다음 Windows는 비활성화 된 창을 다시 그리는 방법을 모르고 단순히 흰색 상자를 그릴 수 있습니다.

0

우리는 OpenDialog.Execute의 문제 만에 하나의 컴퓨터를 가지고 있었다 - 임의 내가 exe를 추가하면 윈도우 DEP는 우리가 변화하기 때문에 문제가 없었어요 문제 를 해결할 수 있음을 발견 할 듯 여기

는 해결 창문을 DEP 설정 http://www.itechtalk.com/thread3591.html

이 을 변경하는 방법에 대한 링크입니다 - 누군가가 DEP 행복을 유지하는 방법을 알고 있다면

0

그것은 Z 순서 아래에 댓글을 추가하시기 바랍니다 부정확하다 (필자가 Citrix에서 종종 볼 수있는 적절한 수정없이) ctrl-F4 또는 alt-f4를 사용하여 양식을 닫을 수 있습니다. 또한 응용 프로그램이 "응답하지 않음"이 아닐 수도 있습니다. 작업 순서를 전환 할 때 때로 순서가 자동으로 수정됩니다.

관련 문제