2010-07-13 3 views
0

windows server 2003 (및 2008) 및 C#에서 작동합니다. 데스크톱의 systray에 문제가 있습니다. 디스크 관리를위한 응용 프로그램을 완료했으며 응용 프로그램이 시작되면 작업 표시 줄에서 자신을 숨기고 시스템 트레이에 아이콘을 추가합니다. 이 아이콘 (시스템 트레이에 있음)을 클릭하면 응용 프로그램의 양식이 표시됩니다.windows-server에서 systray 아이콘과 함께 발생한 문제

시스템 스케줄러에서 특정 시간에 응용 프로그램을 자동으로 실행하는 작업을 만들었습니다. 응용 프로그램이 (스케줄러에서) 점심 때 서버에 로그온하면 아이콘이 시스템 트레이에 나타납니다. 데스크톱. 하지만 서버에 로그온하지 않고 스케줄러가 내 애플리케이션을 점심으로 먹는다면 로그온 할 때 시스템 트레이 아이콘을 볼 수 없지만 응용 프로그램은 완벽하게 작동합니다.

나는 응용 프로그램 폼을 보여주기 위해 여러 가지 방법을 시도했다. 예를 들어, 응용 프로그램은 파일에 플래그를 읽고 플래그가 true이면 form.Show()를 강제 실행하지만 작동하지 않는다.

바탕 화면이로드 될 때 탐색기 (프로세스)에 내 응용 프로그램 양식을 notifiead해야하지만 어떻게 해야할지 모르겠다 고 가정합니다. 코 렌트 방식이야? 나는 너의 충고를 기다리고있다.

안부

답변

2

나는이 아무도 로그인하지 있다는 사실에 기인한다고 가정은에서 응용 프로그램을 실행 할 데스크톱 세션이 없습니다. 응용 프로그램이 잘 작동하더라도

, 그것은이다 나중에 로그인하는 사용자에서 실행되지 않으므로 아이콘을 볼 수 없습니다. 그것은 "백그라운드에서"다른 사용자로 실행 중입니다.

두 명의 사용자가 원격 데스크톱을 사용하여 로그인 한 경우와 실질적으로 동일합니다. 하나는 시스템 트레이 아이콘을 만드는 응용 프로그램을 시작할 수 있고 다른 사용자는 해당 아이콘을 볼 수 없습니다.

한 가지 대안은 응용 프로그램의 논리를 Windows 서비스에 넣는 것입니다. 그런 다음 사용자가 로그인 할 때 자동 실행되는 클라이언트를 만들고 서비스가 현재 활성화되어 있는지 여부를 확인하고 아이콘과 양식을 표시합니다.

1

로그온하지 않은 상태에서 응용 프로그램을 시작하면 바탕 화면 컨텍스트가 없기 때문에 시스템 트레이에 아이콘을 표시하는 코드는 기본적으로 자동으로 '실패합니다'- 아이콘이 사이트로 전송되는 메시지가 전송되지만 거기에 아무것도들을 듣고, 물론 아무도 어쨌든 찾고 있습니다.

나중에 로그온하고 데스크톱 컨텍스트를 만들면 응용 프로그램이 이미 실행 중이며 아이콘을 등록 할 수있는 바탕 화면이 있음을 알 수있는 방법이 없습니다. 시작했을 때 아이콘 등록을했고, 일자리의 일부가 완료되었다고 염려하는 한 아이콘 등록을했습니다.

그래서 바탕 화면과 시스템 트레이에 아이콘이있을 준비가되었음을 앱에 알리는 방법이 필요합니다. 앱은 아이콘 등록 과정을 반복해야합니다. 서비스/클라이언트 정렬을 생성하여 프리젠 테이션 계층에서 코어 로직을 분리하지 않으려면 로그온 할 때 실행되도록 시작 그룹에 앱을 추가 할 수 있습니다.

두 개의 복사본을 실행하지 않으려면 앱을 조정하여 다른 인스턴스가 있는지 확인하고 포커스를 전환하여 자체를 죽일 수있는 앱이 있는지 확인하십시오. 그런 다음 포커스 핸들러에서 아이콘 트레이 등록을 비활성화했다가 다시 활성화하여 해당 메시지를 다시 보냅니다.