{"id":4633,"date":"2009-02-18T22:22:00","date_gmt":"2009-02-18T22:22:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2009\/02\/18\/mfc-restart-manager-support-in-vs2010\/"},"modified":"2019-02-18T18:53:54","modified_gmt":"2019-02-18T18:53:54","slug":"mfc-restart-manager-support-in-vs2010","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/mfc-restart-manager-support-in-vs2010\/","title":{"rendered":"MFC Restart Manager Support in VS2010"},"content":{"rendered":"<p class=\"MsoNormal\"><font face=\"Calibri\"><span>Hi, I am Weidong Huang, a Software Design Engineer in Test in the Visual C++ group.<span>&nbsp; <\/span>Today I am going to&nbsp;talk about MFC\u2019s support of Restart Manager functionality &#8212; a very amazing feature in VS2010.<\/span><span><\/span><\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">What is Restart Manager?<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><span>Restart Manager is a new feature introduced by Microsoft\u2019s Windows Vista operating system.<span>&nbsp; <\/span>It can help applications maintain their data when <\/span>an update needs to shutdown the application or when <span>an unexpected software error or crash occurs. Instead of shutting down abnormally, Restart Manager enables <\/span>an<span> application to perform an application save before it is terminated. Fu<\/span>rthermore, it can re-invoke the <span>application enabling it to restore its state from before the <\/span>shutdown or <span>crash.<span>&nbsp; <\/span><\/span><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><span><span><\/span><\/span><\/font><\/font>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">What Restart Manager support can you get from MFC in VS2010?<\/font><\/span><\/b><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">For new MFC applications, you can get the application restart and recovery feature for free by using the MFC Application Wizard. <span><\/span><\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">All <span>configurable parts of the restart manager API are<\/span> exposed <span>to the user through overridabl<\/span>e virtual members<span>.<\/span><\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">To upgrade an existing application to get the default restart manager support, you only need to add a single line of code. <span><\/span><\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">A<span>n auto-save mechanism is<\/span> added <span>to the application<\/span> that performs the saving of open<span> documents to temporary files in user-definable intervals. If an application crashes due to an exception, the application will be restarted restoring the last backup.<\/span><\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">A restore on restart UI prompts the end user to recover auto-saved versions if available.<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">How to enable Restart Manager in VS2010?<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">The MFC Restart Manager in VS2010 includes two levels of supports:<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><b><font size=\"3\"><font face=\"Calibri\">Restart Support<\/font><\/font><\/b><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">o<\/font><span>&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Restart the application after upgrade or crash<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\"><b>Note: <\/b>This applies to all types of MFC applications<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">\u00b7<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><b><font size=\"3\"><font face=\"Calibri\">Application Recover Support: <\/font><\/font><\/b><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">o<\/font><span>&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Reopen the previously opened document<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font size=\"3\">o<\/font><span>&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Recover the auto saved document<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Note:<\/b> This only applies to Doc\/View type MFC applications and needs restart support.<b> <\/b><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Enabling restart manager support steps are different between new application and existing application:<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><b><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/b><\/p>\n<p class=\"MsoNormal\"><b><font size=\"3\"><font face=\"Calibri\">For new application, you only need 2 steps:<\/font><\/font><\/b><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font face=\"Calibri\" size=\"3\">1.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Use MFC Application Wizard to Create a new MFC Application;<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\" size=\"3\">2.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">In Advance Features page, select Support Restart Manager (see following).<span>&nbsp; <\/span><\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\"><span><\/span><\/font><\/font>&nbsp;<\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\"><span><\/span><\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/9\/2019\/02\/MFC%20Restart%20Manager%20Support%20in%20VS2010.jpg\">&nbsp;<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\"><\/font><\/font>&nbsp;<\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\">There are 3 options for selection:<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font face=\"Calibri\" size=\"3\">a.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Select \u201cSupport Restart Manager\u201d only<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">This option will enable your application with restart support only.<span>&nbsp; <\/span>In other words, the application will be restarted after upgrade shutdown or crash but no attempt will be made to reopen documents or recover documents.<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font face=\"Calibri\" size=\"3\">b.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Select \u201cSupport Restart Manager\u201d and \u201cReopen previously open documents\u201d<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\">Besides the functionality described in a), this option enables your application to reopen previous open documents but no attempt to recover an auto-saved version of the document is made. <\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\" size=\"3\">c.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Select \u201cSupport Restart Manager\u201d , \u201cReopen previously open documents\u201d and \u201cSupport application recovery\u201d<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><font size=\"3\"><font face=\"Calibri\">Besides the functionality described in a) and b), restart manager will try to recover the documents with an auto-save version.<span>&nbsp; <\/span>It will prompt with a TaskDialog (Unicode) or MessageBox(Non Unicode) and ask user whether to recover the documents.<span>&nbsp; <\/span>If user chooses \u201cYes\u201d, the auto-save documents will be opened and used as current documents. If user choose \u201cNo\u201d, the last user saved documents will be opened and the auto-save changes will be discarded.<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><b><font size=\"3\"><font face=\"Calibri\">Note:<span>&nbsp; <\/span><\/font><\/font><\/b><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><b><span><span><font face=\"Calibri\" size=\"3\">1.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/b><b><font size=\"3\"><font face=\"Calibri\">To select b), you need to select a), and to select c), you need to select b).<span>&nbsp; <\/span><\/font><\/font><\/b><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><b><span><span><font face=\"Calibri\" size=\"3\">2.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/b><b><font size=\"3\"><font face=\"Calibri\">For Dialog type Application, b and c will be disabled automatically.<\/font><\/font><\/b><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><b><font size=\"3\"><font face=\"Calibri\">For existing application, you only need add only one line of code in App Class constructor, the code could be: (these 3 lines of code perform the same functionalities as above a, b and c respectively)<\/font><\/font><\/b><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font face=\"Calibri\" size=\"3\">a.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; <\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\" size=\"3\">b.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">m_dwRestartManagerSupportFlags = <\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\">AFX_RESTART_MANAGER_SUPPORT_RESTART_ASPECTS;<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\" size=\"3\">c.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS;<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><font size=\"3\"><font face=\"Calibri\">Example:<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\">CMyApp::CMyApp()<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\">{<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\">\/\/other initialize codes<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><font size=\"3\"><font face=\"Calibri\"><span>}<\/span><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">Tips to use Restart Manager in VS2010<\/font><\/span><\/b><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font face=\"Calibri\" size=\"3\">1.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Use CDataRecoveryHandler::SetAutoSaveInterval to adjust the auto save interval for your special needs.<span>&nbsp; <\/span>The default value is 5 minutes.<span>&nbsp; <\/span>You can get default CDataRecoveryHandler by calling \u201cAfxGetApp()-&gt;GetDataRecoveryHandler()\u201d.<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font face=\"Calibri\" size=\"3\">2.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Although the default implementation of Restart Manager will be enough for most users, you may want to implement a different data recovery strategy for your application.<span>&nbsp; <\/span>In this case, overload CWinApp::GetDataRecoveryHandler() and attach your own DataRecoveryHandler derived from CDataRecoveryHandler.<span>&nbsp; <\/span>Since this is not a common user scenario, I am not covering the usage of this functionality today. For information on how to implement your own DataRecoveryHandler, please refer to the MSDN document which will be published with VS2010.<span>&nbsp; <\/span><\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font face=\"Calibri\" size=\"3\">3.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">To test your application\u2019s restart and recovery capabilities, you can embed crash code to simulate the crash scenario and use \u201cRmStartSession \u201c, \u201cRmRegisterResources\u201d and \u201cRmShutdown\u201d and \u201cRmRestart\u201d Windows APIs to simulate windows upgrade scenario. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Example code of using \u201cRm*\u201d APIs:<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><font size=\"3\"><font face=\"Calibri\">#include &#8220;windows.h&#8221;<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\">#include &#8220;RestartManager.h&#8221;<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\">int wmain(int argc, WCHAR* argv[])<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\">{<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>DWORD dwSessionHandle = 0;<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>WCHAR wszSessionKey[CCH_RM_SESSION_KEY+1];<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>LPCWSTR pwzResourcesToRestart[] = {argv[1]};<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if (RmStartSession(&amp;dwSessionHandle, 0, wszSessionKey) == ERROR_SUCCESS)<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if (RmRegisterResources(dwSessionHandle, 1, pwzResourcesToRestart, 0, NULL, 0, NULL) == ERROR_SUCCESS)<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if (RmShutdown(dwSessionHandle, RmShutdownOnlyRegistered, NULL) == ERROR_SUCCESS)<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if (RmRestart(dwSessionHandle, 0, NULL) == ERROR_SUCCESS)<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>return 0;<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><font size=\"3\"><font face=\"Calibri\">}<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">Hope you like the feature. Let me know if you have any comments on this blog. <\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">&nbsp;<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\">Thanks<br \/>Weidong Huang<br \/>Visual C++ Library QA Team<\/font><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi, I am Weidong Huang, a Software Design Engineer in Test in the Visual C++ group.&nbsp; Today I am going to&nbsp;talk about MFC\u2019s support of Restart Manager functionality &#8212; a very amazing feature in VS2010. &nbsp; What is Restart Manager? Restart Manager is a new feature introduced by Microsoft\u2019s Windows Vista operating system.&nbsp; It can [&hellip;]<\/p>\n","protected":false},"author":289,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4633","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus"],"acf":[],"blog_post_summary":"<p>Hi, I am Weidong Huang, a Software Design Engineer in Test in the Visual C++ group.&nbsp; Today I am going to&nbsp;talk about MFC\u2019s support of Restart Manager functionality &#8212; a very amazing feature in VS2010. &nbsp; What is Restart Manager? Restart Manager is a new feature introduced by Microsoft\u2019s Windows Vista operating system.&nbsp; It can [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/4633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/289"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=4633"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/4633\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=4633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=4633"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=4633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}