Hans Leidekker : msi: Implement MsiGet/SetMode(MSIRUNMODE_REBOOTNOW).

Alexandre Julliard julliard at winehq.org
Mon Apr 2 13:14:51 CDT 2012


Module: wine
Branch: master
Commit: 15ee85dee89e892c2850f4b05c886b9d6b2c6276
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=15ee85dee89e892c2850f4b05c886b9d6b2c6276

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Mon Apr  2 13:15:56 2012 +0200

msi: Implement MsiGet/SetMode(MSIRUNMODE_REBOOTNOW).

---

 dlls/msi/install.c          |    8 ++++++--
 dlls/msi/msipriv.h          |    1 +
 dlls/msi/tests/automation.c |    4 ++--
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/dlls/msi/install.c b/dlls/msi/install.c
index 709f4dc..a6c832a 100644
--- a/dlls/msi/install.c
+++ b/dlls/msi/install.c
@@ -764,6 +764,10 @@ BOOL WINAPI MsiGetMode(MSIHANDLE hInstall, MSIRUNMODE iRunMode)
         r = package->need_reboot_at_end;
         break;
 
+    case MSIRUNMODE_REBOOTNOW:
+        r = package->need_reboot_now;
+        break;
+
     case MSIRUNMODE_LOGENABLED:
         r = (package->log_file != INVALID_HANDLE_VALUE);
         break;
@@ -819,8 +823,8 @@ UINT WINAPI MsiSetMode(MSIHANDLE hInstall, MSIRUNMODE iRunMode, BOOL fState)
         break;
 
     case MSIRUNMODE_REBOOTNOW:
-        FIXME("unimplemented run mode: %d\n", iRunMode);
-        r = ERROR_FUNCTION_FAILED;
+        package->need_reboot_now = (fState != 0);
+        r = ERROR_SUCCESS;
         break;
 
     default:
diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h
index bf15f50..4ed4fd6 100644
--- a/dlls/msi/msipriv.h
+++ b/dlls/msi/msipriv.h
@@ -407,6 +407,7 @@ typedef struct tagMSIPACKAGE
     unsigned char commit_action_running : 1;
     unsigned char rollback_action_running : 1;
     unsigned char need_reboot_at_end : 1;
+    unsigned char need_reboot_now : 1;
     unsigned char need_rollback : 1;
 } MSIPACKAGE;
 
diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c
index 8ae18bd..630ff76 100644
--- a/dlls/msi/tests/automation.c
+++ b/dlls/msi/tests/automation.c
@@ -1887,7 +1887,7 @@ static void test_Session(IDispatch *pSession)
     ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
 
     hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTNOW, TRUE);
-    todo_wine ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
+    ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
     if (hr == DISP_E_EXCEPTION) ok_exception(hr, szModeFlag);
 
     hr = Session_ModeGet(pSession, MSIRUNMODE_REBOOTNOW, &bool);
@@ -1895,7 +1895,7 @@ static void test_Session(IDispatch *pSession)
     ok(bool, "Reboot now mode is %d, expected 1\n", bool);
 
     hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTNOW, FALSE);  /* set it again so we don't reboot */
-    todo_wine ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
+    ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
     if (hr == DISP_E_EXCEPTION) ok_exception(hr, szModeFlag);
 
     hr = Session_ModePut(pSession, MSIRUNMODE_MAINTENANCE, TRUE);




More information about the wine-cvs mailing list