void CmdComponent::Exec() { std::wstring l_command; switch(InstallerSession::Instance->sequence) { case SequenceInstall: l_command = InstallUILevelSetting::Instance->GetCommand( command, command_basic, command_silent); break; case SequenceUninstall: l_command = InstallUILevelSetting::Instance->GetCommand( uninstall_command, uninstall_command_basic, uninstall_command_silent); break; default: THROW_EX(L"Unsupported install sequence: " << InstallerSession::Instance->sequence << L"."); } std::wstring additional_cmd = GetAdditionalCmd(); if (! additional_cmd.empty()) { l_command.append(L" "); l_command.append(additional_cmd); } l_command = InstallerSession::Instance->ExpandUserVariables(l_command); LOG(L"Executing: " << l_command); ProcessComponent::ExecCmd(l_command, execution_method, disable_wow64_fs_redirection); };
std::wstring MsiComponent::GetCommandLine() const { std::wstring l_command = L"msiexec"; std::wstring l_package; std::wstring l_cmdparameters; switch(InstallerSession::Instance->sequence) { case SequenceInstall: l_package = package.GetValue(); l_cmdparameters = InstallUILevelSetting::Instance->GetCommand( cmdparameters, cmdparameters_basic, cmdparameters_silent); l_command += L" /i"; break; case SequenceUninstall: l_package = uninstall_package.empty() ? package.GetValue() : uninstall_package.GetValue(); l_cmdparameters = InstallUILevelSetting::Instance->GetCommand( uninstall_cmdparameters, uninstall_cmdparameters_basic, uninstall_cmdparameters_silent); l_command += L" /x"; break; default: THROW_EX(L"Unsupported install sequence: " << InstallerSession::Instance->sequence << L"."); } l_command.append(L" "); l_command.append(DVLib::GetQuotedPathOrGuid(l_package)); LOG(L"-- Package: " << l_package); if (! l_cmdparameters.empty()) { LOG(L"-- Additional command-line parameters: " << l_cmdparameters); l_command.append(L" "); l_command.append(l_cmdparameters); } std::wstring additional_cmd = GetAdditionalCmd(); if (! additional_cmd.empty()) { l_command.append(L" "); l_command.append(additional_cmd); } l_command = InstallerSession::Instance->ExpandUserVariables(l_command); return l_command; }
void MsuComponent::Exec() { std::wstring l_command = L"wusa.exe "; switch(InstallerSession::Instance->sequence) { case SequenceInstall: break; default: THROW_EX(L"Unsupported install sequence: " << InstallerSession::Instance->sequence << L"."); } l_command.append(L"\""); l_command += DVLib::DirectoryCombine(DVLib::GetCurrentDirectoryW(), package); l_command.append(L"\""); std::wstring l_cmdparameters = InstallUILevelSetting::Instance->GetCommand( cmdparameters, cmdparameters_basic, cmdparameters_silent); if (! l_cmdparameters.empty()) { LOG(L"-- Additional command-line parameters: " << l_cmdparameters); l_command.append(L" "); l_command.append(l_cmdparameters); } std::wstring additional_cmd = GetAdditionalCmd(); if (! additional_cmd.empty()) { l_command.append(L" "); l_command.append(additional_cmd); } l_command = InstallerSession::Instance->ExpandUserVariables(l_command); LOG(L"Executing: " << l_command); if (disable_wow64_fs_redirection) { auto_any<Wow64NativeFS *, close_delete> wow64_native_fs(new Wow64NativeFS()); DVLib::RunCmd(l_command, & m_process_info); } else { DVLib::RunCmd(l_command, & m_process_info); } }
void ExeComponent::Exec() { std::wstring l_command; std::wstring l_exeparameters; std::wstring l_responsefile_source; std::wstring l_responsefile_target; // make executable executable switch(InstallerSession::Instance->sequence) { case SequenceInstall: l_command = InstallUILevelSetting::Instance->GetCommand( executable, executable_basic, executable_silent); l_exeparameters = InstallUILevelSetting::Instance->GetCommand( exeparameters, exeparameters_basic, exeparameters_silent); l_responsefile_source = responsefile_source; l_responsefile_target = responsefile_target; break; case SequenceUninstall: l_command = InstallUILevelSetting::Instance->GetCommand( uninstall_executable, uninstall_executable_basic, uninstall_executable_silent); l_exeparameters = InstallUILevelSetting::Instance->GetCommand( uninstall_exeparameters, uninstall_exeparameters_basic, uninstall_exeparameters_silent); l_responsefile_source = uninstall_responsefile_source; l_responsefile_target = uninstall_responsefile_target; break; default: THROW_EX(L"Unsupported install sequence: " << InstallerSession::Instance->sequence << L"."); } LOG(L"-- Executable: " << l_command); // install_dir std::wstring installdir = InstallerSession::Instance->ExpandUserVariables(install_directory.GetValue()); if (InstallerSession::Instance->sequence == SequenceInstall && ! installdir.empty()) { bool installdir_exists = DVLib::DirectoryExists(installdir); if (! installdir_exists) { LOG(L"-- Creating install_directory directory '" << installdir << L"'"); DVLib::DirectoryCreate(installdir); } else { LOG(L"-- Directory '" << installdir << L"' exists"); } } // response file if (! l_responsefile_source.empty() && ! l_responsefile_target.empty()) { LOG(L"-- Response file source: " << l_responsefile_source << L" (" << responsefile_format << L")"); LOG(L"-- Response file target: " << l_responsefile_target); ResponseFilePtr r; ResponseFileFormat l_responsefile_format = ResponseFile::string2responsefileformat(responsefile_format); switch(l_responsefile_format) { case ResponseFileFormatNone: reset(r, new ResponseFileNone(l_responsefile_source, l_responsefile_target)); break; case ResponseFileFormatIni: reset(r, new ResponseFileIni(l_responsefile_source, l_responsefile_target)); break; case ResponseFileFormatText: reset(r, new ResponseFileText(l_responsefile_source, l_responsefile_target)); break; default: THROW_EX(L"Unsupported response file format: " << responsefile_format); } r->Exec(); } if (! l_exeparameters.empty()) { LOG(L"-- Additional command-line parameters: " << l_exeparameters); l_command.append(L" "); l_command.append(l_exeparameters); } std::wstring additional_cmd = GetAdditionalCmd(); if (! additional_cmd.empty()) { l_command.append(L" "); l_command.append(additional_cmd); } l_command = InstallerSession::Instance->ExpandUserVariables(l_command); LOG(L"Executing: " << l_command); CHECK_BOOL(! l_command.empty(), L"Component command is empty"); ProcessComponent::ExecCmd(l_command, execution_method, disable_wow64_fs_redirection); };
std::wstring MspComponent::GetCommandLine() const { std::wstring l_command = L"msiexec"; std::wstring l_cmdparameters; switch(InstallerSession::Instance->sequence) { case SequenceInstall: // patch l_command += L" /p "; l_command += DVLib::GetQuotedPathOrGuid(patch.GetValue()); // apply a patch to an administrative package if (! package.GetValue().empty()) { l_command += L" /a "; l_command += DVLib::GetQuotedPathOrGuid(package.GetValue()); } // command-line parameters l_cmdparameters = InstallUILevelSetting::Instance->GetCommand( cmdparameters, cmdparameters_basic, cmdparameters_silent); // REINSTALL if (! reinstall.GetValue().empty()) { l_cmdparameters += L" REINSTALL="; l_cmdparameters += reinstall.GetValue(); } // REINSTALLMODE if (! reinstallmode.GetValue().empty()) { l_cmdparameters += L" REINSTALLMODE="; l_cmdparameters += reinstallmode.GetValue(); } break; case SequenceUninstall: // command-line parameters l_cmdparameters = InstallUILevelSetting::Instance->GetCommand( uninstall_cmdparameters, uninstall_cmdparameters_basic, uninstall_cmdparameters_silent); // command l_command += L" /uninstall "; // patch l_command.append(DVLib::GetQuotedPathOrGuid(uninstall_patch.GetValue().empty() ? patch : uninstall_patch)); // msi affected if (! uninstall_package.GetValue().empty()) { l_command += L" /package "; l_command.append(DVLib::GetQuotedPathOrGuid(uninstall_package)); } break; default: THROW_EX(L"Unsupported install sequence: " << InstallerSession::Instance->sequence << L"."); } if (! l_cmdparameters.empty()) { l_command.append(L" "); l_command.append(l_cmdparameters); } std::wstring additional_cmd = GetAdditionalCmd(); if (! additional_cmd.empty()) { l_command.append(L" "); l_command.append(additional_cmd); } l_command = InstallerSession::Instance->ExpandUserVariables(l_command); return l_command; }