2012-09-11 44 views
0

我有一個程序需要能夠更新自己。我有第二個程序將執行更新,下載和安裝。更新程序顯然需要能夠更新主程序,爲此,主程序不能運行。所以我想讓主程序在ShellExecuteEx的調用下啓動更新程序,但the MSDN documentation讓我有點困惑。如何正確啓動更新程序?

它說:如果的ShellExecuteEx返回後...進程將 終止很快

的SEE_MASK_NOASYNC標誌必須被指定。在這種情況下, 調用線程將無法完成DDE 對話,因此在將控制權返回給調用應用程序之前,ShellExecuteEx完成對話 是很重要的。 未能完成對話可能會導致文檔啓動失敗 。

而在SEE_MASK_NOASYNC下,它表示ShellExecuteEx調用將不會返回,直到操作完成。我想要的是啓動更新程序,然後立即終止主程序,因此更新程序可以毫無困難地運行。這是正確的方式嗎?是否有什麼特別的我需要做的,以防止啓動的更新程序被標記爲「子進程」,在主進程關閉時將被終止?

回答

1

DDE不會被用來直接啓動EXE。 (它只用於啓動某些類型的文件,如果它們被註冊爲需要以這種方式啓動的話。如果您只是按名稱運行EXE,DDE應該是無關緊要的。)

因此,您應該指定SEE_MASK_NOASYNC確保ShellExecuteEx調用完成了所需的全部操作,並且只要調用返回,您的應用就可以自由地結束線程),並且API應該很快返回。

4

您是否需要致電ShellExecute?我做了類似的事情,並通過CreateProcess啓動,它工作正常。

(實際上,啓動cmd.exe會運行一個批處理文件,批處理文件等待,啓動updater並等待它完成,然後等待一會,然後再次啓動主應用程序。與它)

相關問題