mirror of
				https://github.com/Icinga/icinga2.git
				synced 2025-11-03 21:25:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.IO;
 | 
						|
using System.Windows.Forms;
 | 
						|
using Microsoft.Win32;
 | 
						|
using System.Runtime.InteropServices;
 | 
						|
using System.Text;
 | 
						|
 | 
						|
namespace Icinga
 | 
						|
{
 | 
						|
    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>
 | 
						|
		[STAThread]
 | 
						|
		static void Main()
 | 
						|
		{
 | 
						|
			Application.EnableVisualStyles();
 | 
						|
			Application.SetCompatibleTextRenderingDefault(false);
 | 
						|
 | 
						|
			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);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |