두 번째 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에 정의 된 응용 프로그램의 모든 권한 및 설정을 보유하고 있는지 조사 중입니다.
두 번째 응용 프로그램을 직접 시작하면 작동합니까? –
해당 컴퓨터의 여러 모니터가 문제가됩니까? Open Dialog가 Remote Desktop Window가 아닌 Second Monitor 영역에서 열리는 것 같습니다. -Alt-Space-M-을 누른 다음 화살표 키를 사용하여 대화 상자를 다시보기로 이동하십시오. –
madExcept가 EAccessViolation을보고합니다. 이것이 hang과 어떻게 관련되어 있는지 설명해 주시겠습니까? – Alex