2009-06-12 29 views

Trả lời

9

Có một tài sản trong Môi trường lớp mà nói về nếu quá trình tắt máy đã bắt đầu:

Environment.HasShutDownStarted 

Nhưng sau khi một số googling tôi phát hiện ra rằng điều này có thể giúp cho bạn:

using Microsoft.Win32; 

//during init of your application bind to this event 
SystemEvents.SessionEnding += 
      new SessionEndingEventHandler(SystemEvents_SessionEnding); 

void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) 
{ 
    if (Environment.HasShutdownStarted) 
    { 
     //Tackle Shutdown 
    } 
    else 
    { 
     //Tackle log off 
    } 
    } 

Nhưng nếu bạn chỉ muốn xóa tệp tạm thời thì tôi nghĩ rằng việc phân biệt giữa tắt máy hoặc đăng xuất không phải là bất kỳ hậu quả nào đối với bạn.

+0

Cũng nên lưu ý, trên Vista + bạn có rất ít thời gian để làm công cụ trong quá trình shutdown, do đó hãy chắc chắn rằng bạn không thể chặn hoặc chờ vì bất kỳ lý do nào (ví dụ: cố gắng xóa một tệp có thể nằm trên mạng chia sẻ, v.v.) –

+0

cảm ơn @Paul, khi đó bạn nên thực hiện một mục nhập ở đâu đó để cửa sổ rõ ràng các công cụ trên khởi động lại hoặc đăng nhập tiếp theo? – TheVillageIdiot

0

Bạn có thể sử dụng WMI và xem Win32_ComputerShutdownEvent nơi Loại bằng 0. Bạn có thể tìm thêm thông tin về sự kiện này here và thông tin thêm về cách sử dụng WMI trong .NET here.

6

Nếu bạn đặc biệt cần sự kiện log-off, bạn có thể sửa đổi các mã được cung cấp trong câu trả lời TheVillageIdiot như sau:

using Microsoft.Win32; 

//during init of your application bind to this event 
SystemEvents.SessionEnding += 
    new SessionEndingEventHandler(SystemEvents_SessionEnding); 

void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) 
{  
    if (e.Reason == SessionEndReasons.Logoff) 
    { 
     // insert your code here 
    } 
} 
Các vấn đề liên quan