]> granicus.if.org Git - icinga2/blobdiff - agent/windows-setup-agent/Program.cs
Merge pull request #6719 from Icinga/fix/finished-reconnect-message
[icinga2] / agent / windows-setup-agent / Program.cs
index ee30b986f6ae67beb62f52c13b2646d21ae08b51..b22b042eb70e077df81744489982638ec4a3e44b 100644 (file)
@@ -1,10 +1,85 @@
 using System;
+using System.IO;
 using System.Windows.Forms;
+using Microsoft.Win32;
+using System.Runtime.InteropServices;
+using System.Text;
 
 namespace Icinga
 {
-       static class Program
+    internal static class NativeMethods
+    {
+        [DllImport("msi.dll", CharSet = CharSet.Unicode)]
+        internal static extern int MsiEnumProducts(int iProductIndex, StringBuilder lpProductBuf);
+
+        [DllImport("msi.dll", CharSet = CharSet.Unicode)]
+        internal static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len);
+    }
+
+    static class Program
        {
+               public static string Icinga2InstallDir
+               {
+                       get
+                       {
+                               StringBuilder szProduct;
+
+                               for (int index = 0; ; index++) {
+                                       szProduct = new StringBuilder(39);
+                                       if (NativeMethods.MsiEnumProducts(index, szProduct) != 0)
+                                               break;
+
+                                       int cbName = 128;
+                                       StringBuilder szName = new StringBuilder(cbName);
+
+                                       if (NativeMethods.MsiGetProductInfo(szProduct.ToString(), "ProductName", szName, ref cbName) != 0)
+                                               continue;
+
+                                       if (szName.ToString() != "Icinga 2")
+                                               continue;
+
+                                       int cbLocation = 1024;
+                                       StringBuilder szLocation = new StringBuilder(cbLocation);
+                                       if (NativeMethods.MsiGetProductInfo(szProduct.ToString(), "InstallLocation", szLocation, ref cbLocation) == 0)
+                                               return szLocation.ToString();
+                               }
+
+                               return "";
+                       }
+               }
+
+               public static string Icinga2DataDir
+               {
+                       get
+                       {
+                               return Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\icinga2";
+                       }
+               }
+
+               public static string Icinga2User
+               {
+                       get
+                       {
+                               if (!File.Exists(Icinga2DataDir + "\\etc\\icinga2\\user"))
+                                       return "NT AUTHORITY\\NetworkService";
+                               System.IO.StreamReader file = new System.IO.StreamReader(Icinga2DataDir + "\\etc\\icinga2\\user");
+                               string line = file.ReadLine();
+                               file.Close();
+
+                               if (line != null)
+                                       return line;
+                               else
+                                       return "NT AUTHORITY\\NetworkService";
+                       }
+               }
+
+
+               public static void FatalError(Form owner, string message)
+               {
+                       MessageBox.Show(owner, message, "Icinga 2 Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                       Application.Exit();
+               }
+
                /// <summary>
                /// The main entry point for the application.
                /// </summary>
@@ -13,7 +88,22 @@ namespace Icinga
                {
                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);
-                       Application.Run(new AgentWizard());
+
+                       string installDir = Program.Icinga2InstallDir;
+
+                       if (installDir == "") {
+                               FatalError(null, "Icinga 2 does not seem to be installed properly.");
+                               return;
+                       }
+
+                       Form form;
+
+                       if (File.Exists(Program.Icinga2DataDir + "\\etc\\icinga2\\features-enabled\\api.conf"))
+                               form = new ServiceStatus();
+                       else
+                               form = new SetupWizard();
+
+                       Application.Run(form);
                }
        }
 }