2013-04-18 112 views
3

如果我需要重新加載它,我使用RestartAPI來重新啓動我的應用程序。它可以正常運行,直到我啓動任何Windows對話框(例如打開對話框),並以Open按鈕被點擊結束!在這種情況下,如果我以後選擇重新啓動新應用程序(重新啓動後)將無法打開任何文件。如果我點擊取消按鈕,新的重新啓動的應用程序將工作得很好。在某些情況下自我重新啓動的應用程序崩潰

我花了很長時間才發現兩次重新啓動之間的區別在於打開對話框與某些與應用程序重新啓動完全無關的打開對話框。請注意,我已經消除了單擊「打開」按鈕後執行的代碼,因此無法通過「打開」按鈕剛剛啓動的一些內存損壞代碼導致該代碼。

單擊打開按鈕一次就足夠了(所以我可能5次單擊取消比一次打開和比如3次取消),任何嘗試重新啓動應用程序,但是「遲到」將導致新的實例不會能夠打開任何文件(甚至沒有std::ifstream)。

一些細節:

  • Visual Studio 2010中
  • 的Windows 7 64位(但有32位XP是一樣的)
  • 對話是在一個單獨的線程
  • 推出我用快板5.0對於圖形但不應相關
  • 該對話框由GetOpenFileName函數啓動

回答

-1

我不知道RestartAPI,但你可以創建臨時批處理文件,這將重新啓動過程沒有任何問題。

+0

似乎很難相信他們會引入一個看起來很複雜的API,可以使用批處理文件輕鬆完成某些工作。 –

+0

只有注射,這是不安全的。 – Nika

+0

你可以發佈一些鏈接或什麼?無論如何,我知道有一種方法可以註冊自Vista以來的重新啓動過程,但是我的代碼也必須與Windows XP一起工作......以及您的意思是「只有注入,這是不安全的。」 ? – Aros

相關問題