]> granicus.if.org Git - icinga2/commitdiff
Hide console windows during installation
authorGunnar Beutner <gunnar@beutner.name>
Fri, 1 Apr 2016 05:37:03 +0000 (07:37 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Fri, 1 Apr 2016 05:37:03 +0000 (07:37 +0200)
refs #11449

icinga-installer/icinga-installer.cpp

index b4587f37ceb88190adea5507f26406c73c1bae90..764f47b53fbbef6e089833b49b1558cb67471c51 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "base/utility.hpp"
 #include "base/application.hpp"
+#include <shellapi.h>
 
 using namespace icinga;
 
@@ -30,15 +31,35 @@ static String GetIcingaInstallDir(void)
        return Utility::DirName(Utility::DirName(szFileName));
 }
 
-static void ExecuteCommand(const String& command)
+static bool ExecuteCommand(const String& app, const String& arguments)
 {
-       std::cerr << "Executing command: " << command << std::endl;
-       system(command.CStr());
+       SHELLEXECUTEINFO sei = {};
+       sei.cbSize = sizeof(sei);
+       sei.fMask = SEE_MASK_NOCLOSEPROCESS;
+       sei.lpFile = app.CStr();
+       sei.lpParameters = arguments.CStr();
+       sei.nShow = SW_HIDE;
+       if (!ShellExecuteEx(&sei))
+               return false;
+       
+       if (!sei.hProcess)
+               return false;
+
+       WaitForSingleObject(sei.hProcess, INFINITE);
+
+       DWORD exitCode;
+       bool res = GetExitCodeProcess(sei.hProcess, &exitCode);
+       CloseHandle(sei.hProcess);
+
+       if (!res)
+               return false;
+
+       return exitCode == 0;
 }
 
-static void ExecuteIcingaCommand(const String& args)
+static bool ExecuteIcingaCommand(const String& arguments)
 {
-       ExecuteCommand("\"" + GetIcingaInstallDir() + "\\sbin\\icinga2.exe\" " + args);
+       return ExecuteCommand(GetIcingaInstallDir() + "\\sbin\\icinga2.exe", arguments);
 }
 
 static void CopyConfigFile(const String& installDir, const String& sourceConfigPath, size_t skelPrefixLength)
@@ -57,8 +78,8 @@ static int InstallIcinga(void)
 {
        String installDir = GetIcingaInstallDir();
 
-       ExecuteCommand("icacls \"" + installDir + "\" /grant *S-1-5-20:(oi)(ci)m");
-       ExecuteCommand("icacls \"" + installDir + "\\etc\" /inheritance:r /grant:r *S-1-5-20:(oi)(ci)m *S-1-5-32-544:(oi)(ci)f");
+       ExecuteCommand("icacls", "\"" + installDir + "\" /grant *S-1-5-20:(oi)(ci)m");
+       ExecuteCommand("icacls", "\"" + installDir + "\\etc\" /inheritance:r /grant:r *S-1-5-20:(oi)(ci)m *S-1-5-32-544:(oi)(ci)f");
 
        Utility::MkDirP(installDir + "/etc/icinga2/pki", 0700);
        Utility::MkDirP(installDir + "/var/cache/icinga2", 0700);
@@ -97,6 +118,8 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
        /* must be called before using any other libbase functions */
        Application::InitializeBase();
 
+       CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
+
        //AllocConsole();
 
        int rc;