2011-01-06 3 views
8

몇 가지 설명 : 내가 작업하고있는 프로젝트에 대해 백그라운드에서 실행중인 프로그램을 작성하고 변경 사항을 감지해야합니다. 파일을 수정하고 수정 된 파일을 웹 서비스에 업로드하여 다른 사람들이 사용할 수 있도록합니다. 사용자가 큰 파일을 수정하고 편집 직후에 컴퓨터를 종료하기로 결정한 경우가 아니라면 아주 단순한 동기화.C# - Windows 종료/로그 오프를 감지하고 해당 작업을 취소하는 방법 (사용자에게 질문 한 후)

나는 업로드를 취소하고 다음에 재부팅 될 때까지 기다릴 수 있지만 다음 날 아침 웹에서 다른 컴퓨터로 파일을 다운로드하고 어젯밤의 변경 사항이 왜 보이지 않는지 이해할 수 없다. 거기있어.

내 생각은 사용자가 Windows를 로그 오프하거나 재부팅 할 때를 감지하여 업로드 중간에 "사용자가 방금 변경 한 파일 Foo.txt과 동기화 중입니다. 재부팅 하시겠습니까? 컴퓨터를 다시 시작해야 변경 사항을 다른 사람이 사용할 수 있습니다! ". 사용자가 아니오라고 말하면 재부팅/로그 오프를 취소해야합니다.

이것이 가능합니까?

답변

8

이 동작을 노출 SystemEvents라는 정적 클래스가있다 :

http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.aspx

그러나, 특정 작업을 구별 할 수없고 OS 프로세스 시간 초과 경비를 일시 정지하지 않습니다. 한 번 사용했지만 레지스트리에 구성된 기본 시간 제한이 약간 짧아서 증가 할 가능성이 높습니다.

긴 이야기를 짧게 자르기 위해, 그것은 모두 약간 hackish를 느꼈다.

+0

그게 내가 생각한 것입니다 ... 나는이 행동을 놓아 버릴 것입니다. 내가 가지고있는 또 다른 아이디어는 항상 반투명 창에서 업로드 진행 상황을 보여줍니다. 그런 다음 사용자는 장면 뒤에서 진행되는 작업을 인식하고이 경우에는 종료되지 않습니다. –

+0

@Sebastien 솔직히 말해서 나는 한스 (Hans)가 제안한대로 서비스를 할 것입니다. 다시 업로드 할 수 있도록 업로드를 강력하게 만들고 사용자가 수동으로 다시 시작할 필요가 없도록 서비스에 모든 것을 포함 시키십시오. –

+0

그건 내가 "이 행동을 놓아 줘"라고했을 때 내가 채택하려고하는 행동이 더 많거나 적습니다. 난 그냥 사용자가 알 수 있도록 이산 업로드 진행 상황을 추가하려고 생각했습니다. 이력서가있는 경우 필요하지 않을 수도 있습니다. 나는 컴퓨터에 백업되지 않은 노트와 파일로 집에 돌아가는 사용자에 대한 생각이 조금 불안해 보인다. –

4

@ Adam의 답변에 덧붙이려면 로그 오프와 종료/재부팅의 차이점을 알 필요가 있다면 WM_QUERYENDSESSION 메시지를 처리 ​​할 수 ​​있습니다.

"Shutdown Changes for Windows Vista"은 종료 시간 초과를 이해하는 데 유용한 문서입니다.

+0

감사합니다. 나는 그것을 추가 할 기회가 없었다. (기차를 타야 만했다.)하지만 내 상황은 종료와 재시작의 차이를 알려서 작업을 중단했다면 사용자의 작업을 재개 할 수 있었다. 나는 그것들을 구별하는 것이 가능하다고 생각하지 않는다. 나는 또한 사건들이 당신에게 행동에 대한 정보를 줄 것이라고 생각하니? –

+0

'SystemEvents' 클래스는 어떤 일이 발생했는지 알려주지 않습니다. 'WM_QUERYENDSESSION'은 로그 오프와 파워 다운 또는 재부팅의 차이점 만 알려줍니다.Windows에서는 시스템 종료 중에 전원 차단과 재부팅의 차이를 알 수 없습니다. –

+0

아 긍정. 지난 밤에 내 오래된 코드를 발견하고이 메시지를 사용하고있는 것을 발견했습니다! 다행히도,이 코드는 이전 보스의 개념 증명이었고 결코 빛을 보지 못했습니다. –

3

셧다운을 막으려 고 노력하는 것이 요즘은 더이상 불가능한 일이며, Vista와 상위 버전에서는 더 이상 그렇게 할 수 없습니다. 프롬프트는 읽을 수 없거나 도달 할 수 없습니다. 서비스를 사용하면 사용자 로그 오프에서 생존 할 수 있습니다. 다시 부팅하면 서비스가 자동으로 다시 시작되어 작업을 완료 할 수 있습니다.

관련 문제