diff --git a/reactos/base/system/msiexec/msiexec.c b/reactos/base/system/msiexec/msiexec.c index cbcd8ec8bd2..44f1f28862e 100644 --- a/reactos/base/system/msiexec/msiexec.c +++ b/reactos/base/system/msiexec/msiexec.c @@ -882,10 +882,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine { InstallUILevel = INSTALLUILEVEL_NONE; } - else if(msi_strequal(argvW[i]+2, "b")) - { - InstallUILevel = INSTALLUILEVEL_BASIC; - } else if(msi_strequal(argvW[i]+2, "r")) { InstallUILevel = INSTALLUILEVEL_REDUCED; @@ -898,28 +894,25 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine { InstallUILevel = INSTALLUILEVEL_NONE|INSTALLUILEVEL_ENDDIALOG; } - else if(msi_strequal(argvW[i]+2, "b+")) + else if(msi_strprefix(argvW[i]+2, "b")) { - InstallUILevel = INSTALLUILEVEL_BASIC|INSTALLUILEVEL_ENDDIALOG; - } - else if(msi_strequal(argvW[i]+2, "b-")) - { - InstallUILevel = INSTALLUILEVEL_BASIC|INSTALLUILEVEL_PROGRESSONLY; - } - else if(msi_strequal(argvW[i]+2, "b+!")) - { - WINE_FIXME("Unhandled modifier: !\n"); - InstallUILevel = INSTALLUILEVEL_BASIC|INSTALLUILEVEL_ENDDIALOG|INSTALLUILEVEL_HIDECANCEL; - } - else if(msi_strequal(argvW[i]+2, "b-!")) - { - WINE_FIXME("Unhandled modifier: !\n"); - InstallUILevel = INSTALLUILEVEL_BASIC|INSTALLUILEVEL_PROGRESSONLY|INSTALLUILEVEL_HIDECANCEL; - } - else if(msi_strequal(argvW[i]+2, "b!")) - { - WINE_FIXME("Unhandled modifier: !\n"); - InstallUILevel = INSTALLUILEVEL_BASIC|INSTALLUILEVEL_HIDECANCEL; + const WCHAR *ptr = argvW[i] + 3; + + InstallUILevel = INSTALLUILEVEL_BASIC; + + while (*ptr) + { + if (msi_strprefix(ptr, "+")) + InstallUILevel |= INSTALLUILEVEL_ENDDIALOG; + if (msi_strprefix(ptr, "-")) + InstallUILevel |= INSTALLUILEVEL_PROGRESSONLY; + if (msi_strprefix(ptr, "!")) + { + WINE_FIXME("Unhandled modifier: !\n"); + InstallUILevel |= INSTALLUILEVEL_HIDECANCEL; + } + ptr++; + } } else { @@ -927,6 +920,14 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine wine_dbgstr_w(argvW[i]+2)); } } + else if(msi_option_equal(argvW[i], "passive")) + { + static const WCHAR rebootpromptW[] = + {'R','E','B','O','O','T','P','R','O','M','P','T','=','"','S','"',0}; + + InstallUILevel = INSTALLUILEVEL_BASIC|INSTALLUILEVEL_PROGRESSONLY|INSTALLUILEVEL_HIDECANCEL; + StringListAppend(&property_list, rebootpromptW); + } else if(msi_option_equal(argvW[i], "y")) { FunctionDllRegisterServer = TRUE; diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 2189af465cf..432650cc913 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -243,7 +243,7 @@ reactos/base/applications/winhlp32 # Synced to WineStaging-1.7.55 reactos/base/applications/wordpad # Synced to WineStaging-1.7.55 reactos/base/services/rpcss # Synced to WineStaging-1.7.55 reactos/base/system/expand # Synced to WineStaging-1.7.47 -reactos/base/system/msiexec # Synced to WineStaging-1.7.47 +reactos/base/system/msiexec # Synced to WineStaging-1.7.55 reactos/modules/rosapps/winfile # Autosync In addition the following libs, dlls and source files are mostly based on code ported