2009-11-11 70 views
3

如果我的程序沒有正確拆卸,系統變得不穩定。沒有真正的解決方法。所以,如果我的程序崩潰並且沒有正確拆卸,那麼我需要告訴用戶何時他再次嘗試運行系統時處於不穩定狀態。正確的做法是在我啓動時創建一個鎖文件,並在我正確退出時將其刪除。如果我開始並且該文件存在,那麼我知道我之前崩潰了。這是正確的方法嗎?如何知道我的程序上次運行時是否崩潰?

回答

5

兩件事情,可能是有用的:

  • Application Recovery and Restart API可以在Vista和Win7中使用。您可以指定操作系統將爲您調用的恢復功能,這樣用戶將會收到通知
  • 創建一個unhandled exception filter,您可以在其他位置嘗試執行某些非常關鍵的恢復。這也將在XP上運行。我之前使用這種技術來關閉驅動程序,否則如果沒有正確關閉,它們會掛起。
0

只要你考慮它,但鎖定文件可能不會被刪除的情況下獨立於您的應用程序,例如.e.g。網絡錯誤,文件系統錯誤,o.s錯誤。

因此,根據您的要求,如果知道當前狀態是否有效至關重要,則可能需要通過檢查所有因變量和狀態來確定有效性,而不是僅依賴鎖定文件。否則,它可以是一個簡單的方法來監視退出狀態。只要不依靠它來確定你是否應該重新發射導彈。

+0

好點。我想我會寫一個標誌我的設置文件,而不是爲了讓生活更輕鬆。謝謝 – Memb 2009-11-11 19:56:45

1

如果你的程序崩潰了,機器重新啓動,會不會仍然處於不穩定的狀態?如果不是,那麼鎖定文件不是您想要採取的方法,因爲該文件在重新啓動後仍然存在。嘗試使用global atom table解決方案。

// Test if the application has crashed since the last reboot 
ATOM myAtom = GlobalFindAtom ("MySecretName"); 
if (myAtom != 0) 
{ 
    // We crashed on last run, inform user and exit 
    // ... 
    exit (0); 
} 

// Create a global atom which will be destroyed only on clean termination 
myAtom = GlobalAddAtom ("MySecretName"); 

// Run your main program here 
// ... 

// Clean termination, delete the atom 
GlobalDeleteAtom (myAtom); 
0

Microsoft Word(PPT/Excel也)遵循類似的方法。在寫入模式下打開文檔時會創建一個隱藏文件,並且只要應用程序正常退出,它就會被刪除。該文件可能有更多的信息,如自動保存文件每'x'分鐘等,但重點是,你的觀點是有效的:-)

相關問題