如果我的程序沒有正確拆卸,系統變得不穩定。沒有真正的解決方法。所以,如果我的程序崩潰並且沒有正確拆卸,那麼我需要告訴用戶何時他再次嘗試運行系統時處於不穩定狀態。正確的做法是在我啓動時創建一個鎖文件,並在我正確退出時將其刪除。如果我開始並且該文件存在,那麼我知道我之前崩潰了。這是正確的方法嗎?如何知道我的程序上次運行時是否崩潰?
3
A
回答
5
兩件事情,可能是有用的:
- 的Application Recovery and Restart API可以在Vista和Win7中使用。您可以指定操作系統將爲您調用的恢復功能,這樣用戶將會收到通知
- 創建一個unhandled exception filter,您可以在其他位置嘗試執行某些非常關鍵的恢復。這也將在XP上運行。我之前使用這種技術來關閉驅動程序,否則如果沒有正確關閉,它們會掛起。
0
只要你考慮它,但鎖定文件可能不會被刪除的情況下獨立於您的應用程序,例如.e.g。網絡錯誤,文件系統錯誤,o.s錯誤。
因此,根據您的要求,如果知道當前狀態是否有效至關重要,則可能需要通過檢查所有因變量和狀態來確定有效性,而不是僅依賴鎖定文件。否則,它可以是一個簡單的方法來監視退出狀態。只要不依靠它來確定你是否應該重新發射導彈。
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'分鐘等,但重點是,你的觀點是有效的:-)
相關問題
- 1. 我們如何知道ios應用程序是否在上次啓動時崩潰?
- 2. xcode崩潰時,我在我的iPhone上運行應用程序
- 3. 如何知道我的應用程序是否在Bluestacks上運行?
- 4. 在運行時,我怎麼知道我是否在WinXP +上? win32
- 5. 不知道爲什麼程序崩潰
- 6. 我如何知道我的Android應用程序是否在後臺運行?
- 7. 崩潰上運行的IOS 9通知
- 8. 如何知道我的媒體爲何在Chromecast上崩潰?
- 9. 如何知道Windows Phone應用程序是否第一次運行
- 10. C程序在運行時崩潰
- 11. MapActivity在運行程序時崩潰
- 12. 在IDE外運行時程序崩潰
- 13. 運行時錯誤,使我的.exe崩潰,我不知道爲什麼
- 14. 智能指針如何知道何時釋放程序崩潰時的資源?
- 15. 在yesod應用程序運行時崩潰記錄卡崩潰
- 16. 程序是否識別它上次崩潰?
- 17. 運行過程中單聲道崩潰
- 18. 如何知道我的Silverlight應用程序是否在本地運行?
- 19. 如何知道Linux中程序崩潰的地址?
- 20. 我的應用程序保持崩潰,我不知道如何修復它?
- 21. 如何知道垃圾收集器是否在我的應用程序運行時期間運行?
- 22. 應用程序運行一次,但第二次崩潰
- 23. 我如何知道我是否在網絡環境中運行?
- 24. 如何知道程序在後臺運行時何時完成?
- 25. 每當我在手機上運行應用程序崩潰
- 26. 如何知道進程是否已在Linux中啓動但崩潰
- 27. 如何知道應用是否第一次在設備上運行?
- 28. Vista - 程序崩潰通知
- 29. 在模擬器上運行應用程序時發生崩潰
- 30. 應用程序在設備上運行時突然崩潰
好點。我想我會寫一個標誌我的設置文件,而不是爲了讓生活更輕鬆。謝謝 – Memb 2009-11-11 19:56:45