SafeDispatch/SetupProj/SetupProj/MainForm.cs
2024-02-22 18:43:59 +02:00

5197 lines
219 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
using SafeMobileLib;
using Nini.Config;
using System.Threading;
using Telerik.WinControls.UI;
using System.ServiceProcess;
using System.Management;
using Telerik.WinControls;
using IWshRuntimeLibrary;
using System.Collections;
using System.Xml;
using System.Timers;
using Microsoft.Win32;
using SharedUI;
using IO = System.IO;
namespace SetupProj
{
public partial class MainForm : Telerik.WinControls.UI.RadForm
{
/*
private enum APP_ADD_REMOVE { UPDATER, DISPATCH, GW_TRBO, GW_REPEATER, GW_CPLUS, GW_TETRA, GW_TETRA_SDR, ADMIN_MODULE, APP_SERVER,
TCP_SERVER, TCP_CLIENT, DISPATCH_MOBILE, DATABASE }*/
//private Dictionary<String, String> productCodes = new Dictionary<String, String>();
public static RADIOTYPE radioType = RADIOTYPE.EXCERA;
public static Color HarrisColor = System.Drawing.SystemColors.ControlDark;
public static Color HarTextColor = Color.White;
public static String AppNAME = "Vision";
public static String ShortcutAppNAME = "Vision";
public static String GatewayNAME = "Momentum";
private Thread[] installThreads;
private volatile bool threadLock = false;
private IConfigSource source = null;
private string CFG_SUM = "SubsConfig.ini";
private string CFG_GW = "GWconfig.ini";
private string CFG_SD = "config.ini";
private string CFG_APP = "appConfig.ini";
private string CFG_Upd = "UpdateConfig.ini";
private string CFG_Server = "TCPServerService.exe.config";
private string CFG_Client = "TCPClientService.exe.config";
private string EXE_SUM = "AdministrativeModule.exe";
private string EXE_Gateway = "MotoTRBO_GW.exe";
private string EXE_Dispatcher = "SafeDispatch_4_0.exe";
private string EXE_APP = "AppServer.exe";
private string EXE_APPMobile = "AppServerMobile.exe";
private string EXE_Upd = "Updater.exe";
private string EXE_Server = "TCPServerService.exe";
private string EXE_Client = "TCPClientService.exe";
private string uInstall_SUM = "AdministrativeModule";
private string uInstall_Gateway = "Gateway";
private string uInstall_Dispatcher = "Vision";
private string uInstall_APP = "AppServer";
private string uInstall_Upd = "SoftwareUpdate";
private String DirName_Sepura3T_SDR = "Sepura3T_SDR";
private String DirName_Tetra_SDR = "Tetra_SDR";
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
private string kitPath = "";
private string installPath = "";
private Boolean SystemType32 = false;
private int installNR = 0;
public static Boolean AdvanceSettings = false;
ManagementObjectSearcher allProducts;
private Hashtable uninstall_hash;
private Hashtable install_hash;
public static Boolean install_Repeater_GW = false;
public MainForm(EULA parent)
{
InitializeComponent();
RadMessageBox.SetThemeName("TelerikMetroBlue");
SM debug = new SM();
parent.Visible = false;
txDefPort.Value = 5432;
txDefPortSD.Value = 5432;
txDefPortSUM.Value = 5432;
txDefPortGW.Value = 5432;
dropGatewayList.DropDownListElement.DropDownWidth = 126;
switch (radioType)
{
case RADIOTYPE.MOTO:
AppNAME = "SafeDispatch";
GatewayNAME = "MotoTRBO";
uInstall_Dispatcher = "SafeDispatch";
ShortcutAppNAME = "SafeDispatch";
EXE_Dispatcher = "Dispatcher.exe";
EXE_Gateway = "MotoTRBO_GW.exe";
uInstall_Gateway = "Gateway";
dropGatewayList.Visible = true;
labelGatewayType.Visible = true;
dropGatewayList.SelectedIndex = 0;
linkAdvance.Location = new Point(linkAdvance.Location.X+90, linkAdvance.Location.Y +12);
gbDispatch.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255-192,255-219,0);
gbAdmin.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
gbDatabase.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
gbGateway.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
// move install checkbox location
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 33);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 51);
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 47);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 33);
break;
case RADIOTYPE.LISF:
AppNAME = "SafeDispatch";
GatewayNAME = "Sepura3T_SDR";
uInstall_Dispatcher = "SafeDispatch";
ShortcutAppNAME = "SafeDispatch";
EXE_Dispatcher = "SafeDispatch.exe";
EXE_Gateway = "Sepura3T_SDR.exe";
uInstall_Gateway = "Gateway";
dropGatewayList.Items.Clear();
dropGatewayList.Items.Add(new RadListDataItem("SEPURA 3T SDR"));
dropGatewayList.Items.Add(new RadListDataItem("TETRA SDR"));
dropGatewayList.Visible = true;
labelGatewayType.Visible = true;
dropGatewayList.SelectedIndex = 0;
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
linkAdvance.Location = new Point(linkAdvance.Location.X + 90, linkAdvance.Location.Y + 12);
gbDispatch.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
gbAdmin.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
gbDatabase.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
gbGateway.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
// move install checkbox location
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 33);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 51);
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 47);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 33);
break;
case RADIOTYPE.HYT:
this.BackgroundImage = global::SetupProj.Properties.Resources.HytLogin;
AppNAME = "SafeSyt";
GatewayNAME = "Hytera";
uInstall_Dispatcher = "SafeSyt";
ShortcutAppNAME = "SafeSyt";
EXE_Dispatcher = "SafeSyt.exe";
EXE_Gateway = "GateWAY.exe";
uInstall_Gateway = "Gateway";
gbDispatch.Text = AppNAME;
gbDispatch.BackColor = Color.Transparent;
gbDispatch.GroupBoxElement.Header.Fill.BackColor = Color.Moccasin;
gbAdmin.BackColor = Color.Transparent;
gbAdmin.GroupBoxElement.Header.Fill.BackColor = Color.Moccasin;
gbDatabase.BackColor = Color.Transparent;
gbDatabase.GroupBoxElement.Header.Fill.BackColor = Color.Moccasin;
gbGateway.BackColor = Color.Transparent;
gbGateway.GroupBoxElement.Header.Fill.BackColor = Color.Moccasin;
Color tmp = Color.DarkBlue;
cbDBinstall.ForeColor = tmp;
cbGWinstall.ForeColor = tmp;
cbSDinstall.ForeColor = tmp;
cbSUMinstall.ForeColor = tmp;
radLabel1.ForeColor = tmp;
radLabel2.ForeColor = tmp;
radLabel3.ForeColor = tmp;
radLabel4.ForeColor = tmp;
radLabel5.ForeColor = tmp;
radLabel6.ForeColor = tmp;
lbStatus.ForeColor = tmp;
install_folder.ForeColor = tmp;
gbDispatch.Text = AppNAME;
gbDispatch.Location = new Point(gbDispatch.Location.X - 55, gbDispatch.Location.Y + 10);
gbAdmin.Location = new Point(gbAdmin.Location.X - 55, gbAdmin.Location.Y + 10);
gbDatabase.Location = new Point(gbDatabase.Location.X - 55, gbDatabase.Location.Y + 10);
gbGateway.Location = new Point(gbGateway.Location.X - 55, gbGateway.Location.Y + 10);
closePanel.Location = new Point(closePanel.Location.X - 20, closePanel.Location.Y + 20);
cbGWinstall.Location = new Point(13, 37);
install_folder.Location = new Point(install_folder.Location.X, install_folder.Location.Y+5);
linkAdvance.Location = new Point(linkAdvance.Location.X+20, linkAdvance.Location.Y+20);
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 50);
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 30);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 30);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 30);
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
break;
case RADIOTYPE.HARRIS:
ThemeResolutionService.ApplicationThemeName = "Office2010Black";
this.BackgroundImage = global::SetupProj.Properties.Resources.vision588h;
AppNAME = "Vision";
GatewayNAME = "Momentum";
uInstall_Dispatcher = "Vision";
ShortcutAppNAME = "Vision";
EXE_Dispatcher = "Vision.exe";
EXE_Gateway = "GateWAY.exe";
uInstall_Gateway = "Gateway";
gbDispatch.Text = AppNAME;
gbDispatch.Location = new Point(gbDispatch.Location.X - 45, gbDispatch.Location.Y + 20);
// radGroupBox1.Size = new Size(radGroupBox1.Width + 20, radGroupBox1.Height);
gbDispatch.BackColor = Color.Transparent;
gbAdmin.Location = new Point(gbAdmin.Location.X - 45, gbAdmin.Location.Y + 20);
//radGroupBox2.Size = new Size(radGroupBox2.Width + 20, radGroupBox2.Height);
gbAdmin.BackColor = Color.Transparent;
gbDatabase.Location = new Point(gbDatabase.Location.X - 45, gbDatabase.Location.Y + 20);
// radGroupBox3.Size = new Size(radGroupBox3.Width + 20, radGroupBox3.Height);
gbDatabase.BackColor = Color.Transparent;
gbGateway.Location = new Point(gbGateway.Location.X - 45, gbGateway.Location.Y + 20);
// radGroupBox4.Size = new Size(radGroupBox4.Width + 20, radGroupBox4.Height);
gbGateway.BackColor = Color.Transparent;
// closePanel.Location = new Point(closePanel.Location.X - 20, closePanel.Location.Y + 20);
cbGWinstall.Location = new Point(13, 47);
//radGroupBox1
//cbSDinstall.Location = new Point(20, 37);
// radLabel1.Location = new Point(135, 23);
// cbChangePortSD.Location = new Point(110, 52);
// tbSDdb.Location = new Point(235, 21);
// txDefPortSD.Location = new Point(235, 50);
//radGroupBox2
/* cbGWinstall.Location = new Point(20, 37);
radLabel4.Location = new Point(135, 23);
cbChangePortSUM.Location = new Point(110, 52);
tbSUMdb.Location = new Point(235, 21);
txDefPortSUM.Location = new Point(235, 50);
//radGroupBox4
cbSUMinstall.Location = new Point(20, 37);
radLabel3.Location = new Point(135, 23);
cbChangePortGW.Location = new Point(110, 52);
tbGWdb.Location = new Point(235, 21);
txDefPortGW.Location = new Point(235, 50);
tbDBadminPass.Location = new Point(tbDBadminPass.Location.X + 10, tbDBadminPass.Location.Y);
tbDBdefaulPAss.Location = new Point(tbDBdefaulPAss.Location.X + 10, tbDBdefaulPAss.Location.Y);
txDefPort.Location = new Point(txDefPort.Location.X + 10, txDefPort.Location.Y);*/
tbSUMdb.BackColor = Color.White;
tbSDdb.BackColor = Color.White;
tbInstallPath.BackColor = Color.White;
tbGWdb.BackColor = Color.White;
tbDBdefaulPAss.BackColor = Color.White;
tbDBadminPass.BackColor = Color.White;
cbDBinstall.ButtonElement.TextElement.ForeColor = HarTextColor;
cbGWinstall.ButtonElement.TextElement.ForeColor = HarTextColor;
cbSDinstall.ButtonElement.TextElement.ForeColor = HarTextColor;
cbSUMinstall.ButtonElement.TextElement.ForeColor = HarTextColor;
install_folder.Location = new Point(install_folder.Location.X + 10, install_folder.Location.Y);
lbStatus.Location = new Point(lbStatus.Location.X + 10, lbStatus.Location.Y);
radLabel1.ForeColor = HarTextColor;
radLabel2.ForeColor = HarTextColor;
radLabel3.ForeColor = HarTextColor;
radLabel4.ForeColor = HarTextColor;
radLabel5.ForeColor = HarTextColor;
radLabel6.ForeColor = HarTextColor;
install_folder.ForeColor = HarTextColor;
lbStatus.ForeColor = HarTextColor;
version.BackColor = Color.Black;
version.ForeColor = HarTextColor;
version.Location = new Point(version.Location.X, version.Location.Y+5);
linkAdvance.BackColor = Color.Transparent;
linkAdvance.Location = new Point(linkAdvance.Location.X + 20, linkAdvance.Location.Y + 20);
rbTCPServer.BackColor = Color.Transparent;
rbTCPClient.BackColor = Color.Transparent;
rbNoService.BackColor = Color.Transparent;
lbServerIP.BackColor = Color.Transparent;
lbPort.BackColor = Color.Transparent;
lbServerIP.Font = new System.Drawing.Font("Segoe UI Semibold", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
lbPort.Font = new System.Drawing.Font("Segoe UI Semibold", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
cbInstallSDMobile.BackColor = Color.Transparent;
cbSDinstall.BackColor = cbGWinstall.BackColor = cbDBinstall.BackColor = cbSUMinstall.BackColor = Color.Transparent;
cbSDinstall.ForeColor = cbGWinstall.ForeColor = cbDBinstall.ForeColor = cbSUMinstall.ForeColor = Color.White;
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 50);
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 30);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 30);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 30);
break;
case RADIOTYPE.ATLAS:
ThemeResolutionService.ApplicationThemeName = "Office2010Black"; //ATLASCHANGE
this.BackgroundImage = global::SetupProj.Properties.Resources.ATL25GUI2;
AppNAME = "Atl25";
GatewayNAME = "Astro";
uInstall_Dispatcher = "Atl25";
ShortcutAppNAME = "Atl25";
EXE_Dispatcher = "Atl25.exe";
EXE_Gateway = "ASTRO_GW.exe";
uInstall_Gateway = "Gateway";
gbDispatch.Text = "ATL25";
gbDispatch.Location = new Point(gbDispatch.Location.X - 400, gbDispatch.Location.Y + 10);
gbDispatch.BackColor = Color.Transparent;
gbAdmin.Location = new Point(gbAdmin.Location.X - 400, gbAdmin.Location.Y + 10);
gbAdmin.BackColor = Color.Transparent;
gbDatabase.Location = new Point(gbDatabase.Location.X - 400, gbDatabase.Location.Y + 10);
gbDatabase.BackColor = Color.Transparent;
gbGateway.Location = new Point(gbGateway.Location.X - 400, gbGateway.Location.Y + 10);
gbGateway.BackColor = Color.Transparent;
/*
gbDispatch.Size = new Size(gbDispatch.Width + 50, gbDispatch.Height);
gbAdmin.Size = new Size(gbAdmin.Width + 50, gbAdmin.Height);
gbDatabase.Size = new Size(gbDatabase.Width + 50, gbDatabase.Height);
gbGateway.Size = new Size(gbGateway.Width + 50, gbGateway.Height);
*/
//closePanel.Location = new Point(closePanel.Location.X - 20, closePanel.Location.Y + 20);
//gbDatabase
install_folder.Location = new Point(install_folder.Location.X - 240, install_folder.Location.Y - 30);
tbInstallPath.Location = new Point(tbInstallPath.Location.X - 390, tbInstallPath.Location.Y-10);
ChangeFolder.Location = new Point(ChangeFolder.Location.X - 390, ChangeFolder.Location.Y-10);
radLabel6.Location = new Point(radLabel6.Location.X - 230, radLabel6.Location.Y - 10);
lbStatus.Location = new Point(lbStatus.Location.X - 230, lbStatus.Location.Y-10);
radWaitingBar1.Location = new Point(radWaitingBar1.Location.X - 230, radWaitingBar1.Location.Y - 10);
version.Location = new Point(version.Location.X + 240, version.Location.Y - 10);
tbDBadminPass.Location = new Point(tbDBadminPass.Location.X + 10, tbDBadminPass.Location.Y);
tbDBdefaulPAss.Location = new Point(tbDBdefaulPAss.Location.X + 10, tbDBdefaulPAss.Location.Y);
txDefPort.Location = new Point(txDefPort.Location.X + 10, txDefPort.Location.Y);
btnInstall.Location = new Point(btnInstall.Location.X - 100, btnInstall.Location.Y-70);
btnUnInstall.Location = new Point(btnUnInstall.Location.X - 100, btnUnInstall.Location.Y-70);
btnInstall.Size = new Size(btnInstall.Size.Width+30, btnInstall.Size.Height);
btnUnInstall.Size = new Size(btnUnInstall.Size.Width+30, btnUnInstall.Size.Height);
tbSUMdb.BackColor = Color.White;
tbSDdb.BackColor = Color.White;
tbInstallPath.BackColor = Color.White;
tbGWdb.BackColor = Color.White;
tbDBdefaulPAss.BackColor = Color.White;
tbDBadminPass.BackColor = Color.White;
((Telerik.WinControls.Primitives.TextPrimitive)(this.rbTCPClient.GetChildAt(0).GetChildAt(1).GetChildAt(0).GetChildAt(0))).ForeColor = HarTextColor;
((Telerik.WinControls.Primitives.TextPrimitive)(this.rbTCPServer.GetChildAt(0).GetChildAt(1).GetChildAt(0).GetChildAt(0))).ForeColor = HarTextColor;
((Telerik.WinControls.Primitives.TextPrimitive)(this.rbNoService.GetChildAt(0).GetChildAt(1).GetChildAt(0).GetChildAt(0))).ForeColor = HarTextColor;
lbServerIP.ForeColor = HarTextColor;
lbPort.ForeColor = HarTextColor;
cbInstallSDMobile.ForeColor = HarTextColor;
cbDBinstall.ButtonElement.TextElement.ForeColor = HarTextColor;
cbGWinstall.ButtonElement.TextElement.ForeColor = HarTextColor;
cbSDinstall.ButtonElement.TextElement.ForeColor = HarTextColor;
cbSUMinstall.ButtonElement.TextElement.ForeColor = HarTextColor;
radLabel1.ForeColor = HarTextColor;
radLabel2.ForeColor = HarTextColor;
radLabel3.ForeColor = HarTextColor;
radLabel4.ForeColor = HarTextColor;
radLabel5.ForeColor = HarTextColor;
radLabel6.ForeColor = HarTextColor;
((Telerik.WinControls.Primitives.TextPrimitive)(this.gbDispatch.GetChildAt(0).GetChildAt(1).GetChildAt(2).GetChildAt(1))).ForeColor = Color.White;
((Telerik.WinControls.Primitives.TextPrimitive)(this.gbAdmin.GetChildAt(0).GetChildAt(1).GetChildAt(2).GetChildAt(1))).ForeColor = Color.White;
((Telerik.WinControls.Primitives.TextPrimitive)(this.gbDatabase.GetChildAt(0).GetChildAt(1).GetChildAt(2).GetChildAt(1))).ForeColor = Color.White;
((Telerik.WinControls.Primitives.TextPrimitive)(this.gbGateway.GetChildAt(0).GetChildAt(1).GetChildAt(2).GetChildAt(1))).ForeColor = Color.White;
install_folder.ForeColor = HarTextColor;
lbStatus.ForeColor = HarTextColor;
version.BackColor = Color.Black;
version.ForeColor = HarTextColor;
linkAdvance.BackColor = Color.Transparent;
linkAdvance.Location = new Point(linkAdvance.Location.X - 300, linkAdvance.Location.Y + 20);
rbTCPServer.BackColor = Color.Transparent;
rbTCPClient.BackColor = Color.Transparent;
rbNoService.BackColor = Color.Transparent;
lbServerIP.BackColor = Color.Transparent;
lbPort.BackColor = Color.Transparent;
lbServerIP.Font = new System.Drawing.Font("Segoe UI Semibold", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
lbPort.Font = new System.Drawing.Font("Segoe UI Semibold", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
cbInstallSDMobile.BackColor = Color.Transparent;
cbSDinstall.BackColor = cbGWinstall.BackColor = cbDBinstall.BackColor = cbSUMinstall.BackColor = Color.Transparent;
cbSDinstall.ForeColor = cbGWinstall.ForeColor = cbDBinstall.ForeColor = cbSUMinstall.ForeColor =
radLabel7.ForeColor = radLabel8.ForeColor = radLabel9.ForeColor = radLabel10.ForeColor = Color.White;
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 50);
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 30);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 30);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 30);
break;
case RADIOTYPE.SIMOCO:
this.BackgroundImage = global::SetupProj.Properties.Resources.simoco3RE;
AppNAME = "SimocoDispatch";
GatewayNAME = "SimocoGWCore";
uInstall_Dispatcher = "SimocoDispatch";
ShortcutAppNAME = "Simoco Dispatch";
EXE_Dispatcher = "SimocoDispatch.exe";
EXE_Gateway = "SimocoGWCore.exe";
uInstall_Gateway = "Gateway";
gbDispatch.Text = AppNAME;
//depend on the desing picture
gbDispatch.BackColor = Color.Transparent;
gbDispatch.GroupBoxElement.Header.Fill.BackColor = Color.Transparent;
gbAdmin.BackColor = Color.Transparent;
gbAdmin.GroupBoxElement.Header.Fill.BackColor = Color.Transparent;
gbDatabase.BackColor = Color.Transparent;
gbDatabase.GroupBoxElement.Header.Fill.BackColor = Color.Transparent;
gbGateway.BackColor = Color.Transparent;
gbGateway.GroupBoxElement.Header.Fill.BackColor = Color.Transparent;
/* Color tmp = Color.DarkBlue;
cbDBinstall.ForeColor = tmp;
cbGWinstall.ForeColor = tmp;
cbSDinstall.ForeColor = tmp;
cbSUMinstall.ForeColor = tmp;
radLabel1.ForeColor = tmp;
radLabel2.ForeColor = tmp;
radLabel3.ForeColor = tmp;
radLabel4.ForeColor = tmp;
radLabel5.ForeColor = tmp;
radLabel6.ForeColor = tmp;
lbStatus.ForeColor = tmp;
install_folder.ForeColor = tmp;*/
gbDispatch.Text = AppNAME;
gbDispatch.Location = new Point(75, 230);
gbGateway.Location = new Point(75, 330);
gbAdmin.Location = new Point(450, 230);
gbDatabase.Location = new Point(450, 330);
linkAdvance.Location = new Point(75, 430);
linkAdvance.BackColor = Color.Transparent;
closePanel.Location = new Point(765,2);
rbTCPServer.BackColor = Color.Transparent;
rbTCPClient.BackColor = Color.Transparent;
rbNoService.BackColor = Color.Transparent;
lbServerIP.BackColor = Color.Transparent;
lbPort.BackColor = Color.Transparent;
cbInstallSDMobile.BackColor = Color.Transparent;
cbInstallSDMobile.Text = "Install Application Server for Dispatch Mobile";
version.BackColor = Color.Transparent;
/*Int32 Xdev = 500;
Int32 Ydev = -20;
rbTCPServer.Location = new Point(rbTCPServer.Location.X - Xdev, rbTCPServer.Location.Y-Ydev);
rbTCPClient.Location = new Point(rbTCPClient.Location.X - Xdev, rbTCPClient.Location.Y - Ydev);
rbNoService.Location = new Point(rbNoService.Location.X - Xdev, rbNoService.Location.Y - Ydev);*/
rbTCPServer.Location = new Point(185, 415);
lbServerIP.Location = new Point(85, 440);
version.Location = new Point(120, 500);
/* lbServerIP.Location = new Point(lbServerIP.Location.X - Xdev, lbServerIP.Location.Y - Ydev);
lbPort.Location = new Point(lbPort.Location.X - Xdev, lbPort.Location.Y - Ydev);
cbInstallSDMobile.Location = new Point(cbInstallSDMobile.Location.X - Xdev, cbInstallSDMobile.Location.Y - Ydev);
txTCPIP.Location = new Point(txTCPIP.Location.X - Xdev, txTCPIP.Location.Y - Ydev);
txTCPPort.Location = new Point(txTCPPort.Location.X - Xdev, txTCPPort.Location.Y - Ydev);*/
install_folder.Location = new Point(install_folder.Location.X, install_folder.Location.Y + 5);
cbSDinstall.BackColor = cbGWinstall.BackColor = cbDBinstall.BackColor = cbSUMinstall.BackColor = Color.Transparent;
// move install checkbox location
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 33);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 34);
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 47);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 33);
break;
case RADIOTYPE.LINX:
case RADIOTYPE.LINXB:
AppNAME = "LinxDispatch";
GatewayNAME = "Linx";
uInstall_Dispatcher = "LinxDispatch";
ShortcutAppNAME = "LinxDispatch";
EXE_Dispatcher = "LinxDispatch.exe";
EXE_Gateway = "LinxGateway.exe";
uInstall_Gateway = "LinxGateway";
BackgroundImage = global::SetupProj.Properties.Resources.login_linx;
if(radioType == RADIOTYPE.LINXB)
{
dropGatewayList.Items.Clear();
dropGatewayList.Items.Add("LINX");
dropGatewayList.Items.Add("MOTOTRBO");
}
dropGatewayList.Visible = labelGatewayType.Visible = radioType == RADIOTYPE.LINXB;
dropGatewayList.SelectedIndex = 0;
gbDispatch.Text = AppNAME.ToUpper();
linkAdvance.Location = new Point(linkAdvance.Location.X + 90, linkAdvance.Location.Y + 12);
gbDispatch.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
gbAdmin.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
gbDatabase.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
gbGateway.GroupBoxElement.Header.TextPrimitive.ForeColor = Color.FromArgb(255 - 192, 255 - 219, 0);
// move install checkbox location
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 33);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 51);
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 47);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 33);
break;
case RADIOTYPE.EXCERA:
AppNAME = "SafeDispatch";
GatewayNAME = "Excera";
uInstall_Dispatcher = "SafeDispatch";
ShortcutAppNAME = "SafeDispatch";
EXE_Dispatcher = "SafeDispatch.exe";
EXE_Gateway = "ExceraGateway.exe";
uInstall_Gateway = "ExceraGateway";
//ThemeResolutionService.ApplicationThemeName = "Office2010Black"; //ATLASCHANGE
this.BackgroundImage = Properties.Resources.axys;
this.BackgroundImageLayout = ImageLayout.Stretch;
linkAdvance.Location = new Point(linkAdvance.Location.X + 90, linkAdvance.Location.Y + 12);
// move install checkbox location
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 33);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 51);
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 47);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 33);
break;
}
installThreads = new Thread[8];
if (CheckIPV6())//x86
{
SM.Debug("SYSTEM IPV6 ->ON");
}
else
{
SM.Debug("SYSTEM IPV6 ->OFF");
}
kitPath = System.Windows.Forms.Application.StartupPath;
kitPath += "\\";
tbInstallPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\" + Program.COMPANY;
SM.Debug("kitDir=" + kitPath);
this.Size = new Size(783, 588);
Version v = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
this.version.Text = "Version: " + v;
}
private void closePanel_Click(object sender, EventArgs e)
{
Close();
System.Windows.Forms.Application.Exit();
}
private void MainForm_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
private void btnInstall_Click(object sender, EventArgs e)
{
uninstall = false;
install_hash = new Hashtable();
if (tbDBadminPass.Text == "" || tbDBdefaulPAss.Text == "")
{
RadMessageBox.Show("Please insert a password for admin and default");
return;
}
//if no app selected return
if (!cbDBinstall.Checked && !cbGWinstall.Checked && !cbSDinstall.Checked && !cbSUMinstall.Checked && !AdvanceSettings)
{
RadMessageBox.Show("Please select an application for installing");
return;
}
btnInstall.Enabled = false;
radWaitingBar1.Visible = true;
installPath = tbInstallPath.Text + "\\";
if (8 == IntPtr.Size
|| (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
{
if(installPath.Contains("Program Files") && !installPath.Contains("Program Files (x86)"))
installPath = installPath.Replace("Program Files", "Program Files (x86)");
}
else SystemType32 = true;
string var = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432");
Console.WriteLine(var);
// Write path to the registry
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software", true);
if (key.OpenSubKey(Program.COMPANY) == null)
key.CreateSubKey(Program.COMPANY);
key = key.OpenSubKey(Program.COMPANY, true);
//if (key.GetValue("Path") == null)
key.SetValue("Path", tbInstallPath.Text);
var pathReg = key.GetValue("Path");
/*
key = Registry.CurrentUser.OpenSubKey("Software", true);
key.CreateSubKey("AppName");
key = key.OpenSubKey("AppName", true);
key.CreateSubKey("AppVersion");
key = key.OpenSubKey("AppVersion", true);
key.SetValue("yourkey", "yourvalue");
*/
try
{
DirectoryInfo dr = new DirectoryInfo(installPath);
if (!dr.Exists) dr.Create();
}
catch (Exception ex)
{
RadMessageBox.Show("Unable to create installation folder");
return;
}
btnUnInstall.Enabled = false;
if (cbDBinstall.Checked)
{
if (!Search4App("postgresql"))
{
installNR++;
installThreads[0] = new Thread(new ThreadStart(InstallDBcallback));
installThreads[0].IsBackground = true;
installThreads[0].Start();
AddToInstall_Hash("postgresql",true);
}
if (!IsAppInstalled(App.APP_SERVER)) //(!Search4App("AppServer"))
{
installNR++;
installThreads[1] = new Thread(new ThreadStart(InstallAPPcallback));
installThreads[1].IsBackground = true;
installThreads[1].Start();
AddToInstall_Hash("AppServer", true);
}
if (!IsAppInstalled(App.APP_SERVER_MOBILE)) //(!Search4App("AppServer"))
{
installNR++;
installThreads[1] = new Thread(new ThreadStart(InstallAPPcallback));
installThreads[1].IsBackground = true;
installThreads[1].Start();
AddToInstall_Hash("AppServer", true);
}
}
if (cbSDinstall.Checked)
{
App app = App.DISPATCH_MOTOROLA;
switch (radioType)
{
case RADIOTYPE.MOTO:
case RADIOTYPE.LISF:
app = App.DISPATCH_MOTOROLA;
AppNAME = "SafeDispatch"; break;
case RADIOTYPE.HYT: app = App.DISPATCH_HYTERA; AppNAME = "SafeSyt"; break;
case RADIOTYPE.HARRIS: app = App.DISPATCH_HARRIS; AppNAME = "Vision"; break;
case RADIOTYPE.ATLAS: app = App.DISPATCH_ATLAS; AppNAME = "Atl25"; break;
case RADIOTYPE.SIMOCO: app = App.DISPATCH_SIMOCO; AppNAME = "SimocoDispatch"; break;
case RADIOTYPE.LINX: case RADIOTYPE.LINXB: app = App.DISPATCH_LINX; AppNAME = "LINXDispatch"; break;
default: app = App.DISPATCH_MOTOROLA;break;
}
if (!IsAppInstalled(app)) // Search4App(AppNAME))
{
installNR++;
installThreads[2] = new Thread(new ThreadStart(InstallSDcallback));
installThreads[2].IsBackground = true;
installThreads[2].Start();
AddToInstall_Hash(AppNAME, true);
}
}
if (cbGWinstall.Checked)
{
bool isInstalled = false;
if (radioType == RADIOTYPE.MOTO)
{
if (dropGatewayList.SelectedIndex == 0) isInstalled = IsAppInstalled(App.GW_TRBO);
else if (dropGatewayList.SelectedIndex == 1) isInstalled = IsAppInstalled(App.GW_TETRA);
else if (dropGatewayList.SelectedIndex == 2) isInstalled = IsAppInstalled(App.GW_CPLUS);
else if (dropGatewayList.SelectedIndex == 3) isInstalled = IsAppInstalled(App.GW_TETRA_SDR);
else if (dropGatewayList.SelectedIndex == 4)
{
isInstalled = IsAppInstalled(App.GW_REPEATER); // Search4App("Repeater_Gateway");
install_Repeater_GW = true;
}
else if (dropGatewayList.SelectedIndex == 5) isInstalled = IsAppInstalled(App.GW_SMC);
}
else if (radioType == RADIOTYPE.LISF)
{
if (dropGatewayList.SelectedIndex == 0) isInstalled = IsAppInstalled(App.GW_SEPURA_3T_SDR);
else if (dropGatewayList.SelectedIndex == 1) isInstalled = IsAppInstalled(App.GW_TETRA_SDR);
}
else if (radioType == RADIOTYPE.LINX)
isInstalled = IsAppInstalled(App.LINX_GATEWAY);
else if (radioType == RADIOTYPE.LINXB)
{
if(dropGatewayList.SelectedIndex == 0) isInstalled = IsAppInstalled(App.LINX_GATEWAY);
else if (dropGatewayList.SelectedIndex == 1) isInstalled = IsAppInstalled(App.GW_TRBO);
}
else
isInstalled = IsAppInstalled(App.GW_TRBO); // Search4App("Gateway");
if (!isInstalled)
{
installNR++;
installThreads[3] = new Thread(new ThreadStart(InstallGWcallback));
installThreads[3].IsBackground = true;
installThreads[3].Start();
AddToInstall_Hash("Gateway", true);
}
}
if (cbSUMinstall.Checked)
{
if (!IsAppInstalled(App.ADMIN_MODULE)) //Search4App("AdministrativeModule"))
{
installNR++;
installThreads[4] = new Thread(new ThreadStart(InstallSUMcallback));
installThreads[4].IsBackground = true;
installThreads[4].Start();
AddToInstall_Hash("AdministrativeModule", true);
}
}
//if any, then also install updater
if (cbDBinstall.Checked || cbSDinstall.Checked || cbGWinstall.Checked || cbSUMinstall.Checked)
{
// remove updater from the list of installed apps
/*
//if updater not previously not installed
if (!Search4App("Updater"))
{
installNR++;
installThreads[5] = new Thread(new ThreadStart(InstallUpdcallback));
installThreads[5].IsBackground = true;
installThreads[5].Start();
AddToInstall_Hash("Updater", true);
}*/
}
if (cbInstallSDMobile.Checked)
{
if (!Search4App("AppServerMobile"))
{
installNR++;
installThreads[6] = new Thread(new ThreadStart(InstallSDMobilecallback));
installThreads[6].IsBackground = true;
installThreads[6].Start();
AddToInstall_Hash("AppServerMobile", true);
}
}
if (AdvanceSettings)
{
if (rbTCPServer.IsChecked)
{
if (!IsAppInstalled(App.TCP_SERVER)) // Search4App("TCPServer"))
{
installNR++;
installThreads[7] = new Thread(new ThreadStart(InstallTCPServercallback));
installThreads[7].IsBackground = true;
installThreads[7].Start();
AddToInstall_Hash("TCPServer", true);
}
}
else if (rbTCPClient.IsChecked)
{
if (!IsAppInstalled(App.TCP_CLIENT)) // Search4App("TCPClient"))
{
installNR++;
installThreads[7] = new Thread(new ThreadStart(InstallTCPClientcallback));
installThreads[7].IsBackground = true;
installThreads[7].Start();
AddToInstall_Hash("TCPClient", true);
}
}
}
Console.WriteLine("Numbers of installs to be performed:" + installNR);
if (installNR == 0)
{
radWaitingBar1.Visible = false;
lbStatus.Text = "Installation not needed!!";
btnInstall.Enabled = true;
RadMessageBox.Show("All the applications that are selected are already installed.");
btnUnInstall.Enabled = true;
}
else
{
// copy remote support file to the installed path
if (Program.COMPANY.Equals("SafeMobile") && !IO.File.Exists(installPath + "\\" + "SafeMobileRemoteSupport.exe"))
{
IO.File.Copy("SafeMobileRemoteSupport.exe", installPath + "\\" + "SafeMobileRemoteSupport.exe");
// create shortcut for the remote support
CreateShortcut(installPath, "SafeMobileRemoteSupport", "SafeMobile Remote Support");
}
else if(!IO.File.Exists(installPath + "\\" + Program.COMPANY + "RemoteSupport.exe"))
{
IO.File.Copy("RemoteSupport.exe", installPath + "\\"+ Program.COMPANY + "RemoteSupport.exe");
// create shortcut for the remote support
CreateShortcut(installPath, Program.COMPANY + "RemoteSupport.exe", Program.COMPANY + " Remote Support");
}
}
}
#region Callbacks install
private void InstallDBcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
InstallDB(tbDBadminPass.Text, tbDBdefaulPAss.Text,txDefPort.Text);
}
private void InstallSDcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
InstallSD(tbSDdb.Text, txDefPortSD.Text);
}
private void InstallSDMobilecallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
InstallSDMobile(tbSDdb.Text, txDefPortSD.Text);
}
private void InstallTCPServercallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
InstallTCPServer(txTCPPort.Text);
}
private void InstallTCPClientcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
InstallTCPClient(txTCPIP.Text, txTCPPort.Text);
}
private void InstallGWcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
InstallGW(tbGWdb.Text, txDefPortGW.Text);
}
private void InstallSUMcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
InstallSUM(tbSUMdb.Text, txDefPortSUM.Text);
}
private void InstallAPPcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true; //allways in the same PC with DB
InstallAPP("127.0.0.1", txDefPort.Text);
}
private void InstallUpdcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
if (cbSDinstall.Checked)
{
InstallUpd(tbSDdb.Text, txDefPortSD.Text);
}
else if (cbGWinstall.Checked)
{
InstallUpd(tbGWdb.Text, txDefPortGW.Text);
}
else if (cbSUMinstall.Checked)
{
InstallUpd(tbSUMdb.Text, txDefPortSUM.Text);
}
else if (cbDBinstall.Checked)
{
InstallUpd("127.0.0.1", txDefPort.Text);
}
}
#endregion
#region installing methods
private void InstallDB(string adminPass, string defaultPass,String port)
{
updateStatus("Installing Database", true);
Console.WriteLine("======================================================");
SM.Debug("Installing DB");
//copy tools folder
//CopyFolder(kitPath + "Tools", installPath + "Tools");
if (port == "5432")
{
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = p.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
// unziping DB to install dir
sw.WriteLine(kitPath.Substring(0, 2));
sw.WriteLine("cd " + '"' + kitPath + "PostgreSD" + '"');
sw.WriteLine("unzip -o postgresql.zip -d " + '"' + installPath + "postgresql" + '"');
bool testIPV6 = CheckIPV6();
if (testIPV6)//x86
{
SM.Debug("SYSTEM IPV6 ON... pg_hba64.conf copied to DB config");
sw.WriteLine("copy " + '"' + kitPath + "PostgreSD\\pg_hba64.conf" + '"' + " " + '"' + installPath + "postgresql\\SafeDB\\pg_hba.conf" + '"' + " /y");
}
else
{
SM.Debug("SYSTEM IPV6 OFF... old pg_hba.conf keeped");
}
//change Dir to install path
sw.WriteLine(installPath.Substring(0, 2));
sw.WriteLine("cd " + '"' + installPath + "postgresql\\pgsql\\bin" + '"');
//register and start net process
sw.WriteLine("pg_ctl register -N PostgreSD -D " + '"' + installPath + "postgresql\\SafeDB" + '"');
sw.WriteLine("net start PostgreSD");
Environment.SetEnvironmentVariable("PGPASSWORD", "wizdemo26", EnvironmentVariableTarget.Machine);
}
sw.Close();
}
using (StreamReader reader = p.StandardOutput)
{
string output = reader.ReadToEnd();
//Console.WriteLine(output);
p.WaitForExit();
//Utils.WriteLine("INSTALL Database OUTPUT RESULT " + output, ConsoleColor.Magenta);
SM.Debug("DB install completed!!!");
}
}
else InstallDBSpecial(port);
try
{
Int32 trys = 0; Boolean conectionOK = false;
DBuserManager db4users = null;
DBRadioTypeManager db4RadioType = null;
while ((trys < 4)&&(!conectionOK))
{
try
{
Thread.Sleep(3000);// wait for Postgres to start
db4users = new DBuserManager("localhost", "safedispatchdb", "postgres", "wizdemo26", port);
db4users.setPasswords(adminPass, defaultPass);
conectionOK = true;
SM.Debug("Saving new passwords in DB");
db4RadioType = new DBRadioTypeManager("localhost", "safedispatchdb", "postgres", "wizdemo26", port);
string radio_type = "";
var list = new List<int> { 1, 2, 3, 4, 5 };
if (list.Contains((int)radioType)) radio_type = ((int)radioType).ToString();
else
{
if (radioType == RADIOTYPE.MOTO)
{
if (dropGatewayList.SelectedIndex == 0) radio_type = "0";
else if (dropGatewayList.SelectedIndex == 1 || dropGatewayList.SelectedIndex == 3) radio_type = "6";
else if (dropGatewayList.SelectedIndex == 2) radio_type = "7";
else if (dropGatewayList.SelectedIndex == 4) radio_type = "8";
}
else if (radioType == RADIOTYPE.LINXB)
radio_type = ((int)RADIOTYPE.LINXB).ToString();
}
db4RadioType.setRadioType(radio_type);
conectionOK = true;
SM.Debug("Saving radio type in DB");
}
catch (Exception ex)
{
trys++;
SM.Debug("Number of trys:"+trys);
}
}
//if (conectionOK) db4users.setPasswords(adminPass, defaultPass);
SM.Debug("Saving new passwords done");
}
catch(Exception ex)
{
SM.Debug("Error opening DB" + ex.ToString());
}
Console.WriteLine("======================================================");
//signal thread complet
installNR--;
updateStatus("Database installed", false);
Thread.Sleep(1000);
threadLock = false;
}
private void InstallDBSpecial(String port)
{
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = p.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
// unziping DB to install dir
sw.WriteLine(kitPath.Substring(0, 2));
sw.WriteLine("cd " + '"' + kitPath + "PostgreSD" + '"');
sw.WriteLine("unzip -o postgresql.zip -d " + '"' + installPath + "postgresql" + '"');
bool testIPV6 = CheckIPV6();
if (testIPV6)//x86
{
SM.Debug("SYSTEM IPV6 ON... pg_hba64.conf copied to DB config");
sw.WriteLine("copy " + '"' + kitPath + "PostgreSD\\pg_hba64.conf" + '"' + " " + '"' + installPath + "postgresql\\SafeDB\\pg_hba.conf" + '"' + " /y");
}
else
{
SM.Debug("SYSTEM IPV6 OFF... old pg_hba.conf keeped");
}
}
sw.Close();
}
using (StreamReader reader = p.StandardOutput)
{
string output = reader.ReadToEnd();
//Console.WriteLine(output);
p.WaitForExit();
SM.Debug("DB unzip completed!!!");
}
replace_portForDB(installPath + "postgresql\\SafeDB\\postgresql.conf", "5432", port);
Process p2 = new Process();
ProcessStartInfo info2 = new ProcessStartInfo();
info2.CreateNoWindow = true;
info2.FileName = "cmd.exe";
info2.RedirectStandardInput = true;
info2.RedirectStandardOutput = true;
info2.UseShellExecute = false;
p2.StartInfo = info;
p2.Start();
StreamWriter sw2 = p2.StandardInput;
if (sw2.BaseStream.CanWrite)
{
//change Dir to install path
sw2.WriteLine(installPath.Substring(0, 2));
sw2.WriteLine("cd " + '"' + installPath + "postgresql\\pgsql\\bin" + '"');
//register and start net process
sw2.WriteLine("pg_ctl register -N PostgreSD -D " + '"' + installPath + "postgresql\\SafeDB" + '"');
sw2.WriteLine("net start PostgreSD");
Environment.SetEnvironmentVariable("PGPASSWORD", "wizdemo26", EnvironmentVariableTarget.Machine);
}
sw2.Close();
StreamReader reader2 = p2.StandardOutput;
string output2 = reader2.ReadToEnd();
//Console.WriteLine(output);
p2.WaitForExit();
SM.Debug("DB install completed!!!");
}
private void InstallSD(string ip, String port)
{
Console.WriteLine("======================================================");
SM.Debug("Installing SD");
updateStatus("Installing "+AppNAME, true);
String fileMSI = "";
string[] fileEntries;
try
{
fileEntries = Directory.GetFiles(kitPath + AppNAME);
foreach (string fileName in fileEntries)
{
String fileNametmp = fileName.Substring(fileName.LastIndexOf('\\'));
if (fileNametmp.ToUpper().Contains(".MSI") || fileNametmp.Contains(".msi"))
fileMSI = fileNametmp.Remove(0, 1);
}
}
catch (Exception ex)
{
SM.Debug("Error finding MSI " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = p.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + AppNAME + '"';
sw.WriteLine(kitPath.Substring(0, 2));
sw.WriteLine("cd " + '"' + kitPath + AppNAME + '"');
sw.WriteLine(cmd);
Utils.WriteLine($"Installing Dispatcher: {cmd}", ConsoleColor.DarkYellow);
}
sw.Close();
p.WaitForExit();
using (StreamReader reader = p.StandardOutput)
{
string output = reader.ReadToEnd();
Utils.WriteLine("INSTALL Dispatcher OUTPUT RESULT " + output, ConsoleColor.Magenta);
}
}
//Console.WriteLine(output);
FileInfo fi;
fi = new FileInfo(installPath + AppNAME+"\\" + CFG_SD);
int count = 0;
while (!fi.Exists && count < 10)
{
Thread.Sleep(1000);
count++;
SM.Debug("File " + installPath + AppNAME+"\\" + CFG_SD + " missing retry " + count);
}
try
{
//set DB IP
source = new IniConfigSource(installPath + AppNAME+"\\" + CFG_SD);
source.Configs["Server"].Set("IP", ip);
//source.Configs["Database"].Set("IP", ip);
//source.Configs["Database"].Set("Port", port);
source.Configs["Recordings"].Set("IP", ip);
source.Save();
SM.Debug("Added new DB ip to SD config file");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
installNR--;
threadLock = false;
//try
//{
// string destinationPath = installPath + AppNAME + "\\" + EXE_Dispatcher;
// string sourceFolder = getSourceFolderBasedOnSelectedGateway();
// if (radioType == RADIOTYPE.MOTO)
// {
// if (!string.IsNullOrEmpty(sourceFolder))
// {
// string sourcePath = $"{kitPath}{sourceFolder}\\{EXE_Dispatcher}";
// IO.File.Copy(sourcePath, destinationPath, true);
// }
// else
// Utils.WriteLine("Invalid sourcePath", ConsoleColor.Red);
// }
// else if (radioType == RADIOTYPE.LISF)
// {
// if (dropGatewayList.SelectedIndex == 0)
// IO.File.Copy(kitPath + DirName_Sepura3T_SDR + "\\" + EXE_Dispatcher, destinationPath, true);
// else if (dropGatewayList.SelectedIndex == 1)
// IO.File.Copy(kitPath + DirName_Tetra_SDR + "\\" + EXE_Dispatcher, destinationPath, true);
// }
// else if (radioType == RADIOTYPE.LINX || radioType == RADIOTYPE.LINXB)
// IO.File.Copy(kitPath + "Gateway\\" + EXE_Dispatcher, destinationPath, true);
// else if (radioType == RADIOTYPE.EXCERA)
// IO.File.Copy(kitPath + "Gateway\\" + EXE_Dispatcher, destinationPath, true);
// else if (radioType == RADIOTYPE.HYT)
// IO.File.Copy(kitPath + "Gateway\\" + EXE_Dispatcher, destinationPath, true);
//}
//catch (Exception ex)
//{
// Utils.WriteLine("Error on copying SD executable file " + ex.ToString(), ConsoleColor.Red);
// //SM.Debug("Error on copy files:" + ex.ToString());
//}
//done
SM.Debug("SD installed");
Console.WriteLine("======================================================");
updateStatus(AppNAME+" installed", false);
CreateShortcut(installPath + AppNAME+"\\", EXE_Dispatcher, ShortcutAppNAME);
//CreateShortcut(installPath + "SafeSyt\\", "SafeSyt.exe", "SafeSyt");
}
private string getSourceFolderBasedOnSelectedGateway()
{
switch (dropGatewayList.SelectedIndex)
{
case 0: return "Gateway" ;
case 1: return "Tetra";
case 2: return "CPlus";
case 3: return "Tetra_SDR";
case 4: return "Repeater_Gateway";
case 5: return "SMC_Gateway";
default: return "";
}
}
private void InstallTCPServer(String port)
{
Console.WriteLine("======================================================");
SM.Debug("Installing TCPServer");
updateStatus("Installing " + "TCPServer", true);
String fileMSI = "";
string[] fileEntries;
try
{
Utils.WriteEventLog(Program.COMPANY, "Installing TCPServer", EventLogEntryType.Information, 23456);
}
catch (Exception ex)
{
SM.Debug("Error Creating " + Program.COMPANY + " Source EventLog " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
try
{
fileEntries = Directory.GetFiles(kitPath + "TCPServer");
foreach (string fileName in fileEntries)
{
String fileNametmp = fileName.Substring(fileName.LastIndexOf('\\'));
if (fileNametmp.ToUpper().Contains(".MSI") || fileNametmp.Contains(".msi"))
fileMSI = fileNametmp.Remove(0, 1);
}
}
catch (Exception ex)
{
SM.Debug("Error finding MSI " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = p.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "TCPServer" + '"';
sw.WriteLine(kitPath.Substring(0, 2));
sw.WriteLine("cd " + '"' + kitPath + "TCPServer" + '"');
sw.WriteLine(cmd);
Utils.WriteLine($"Installing TCPServer: {cmd}", ConsoleColor.DarkYellow);
}
sw.Close();
p.WaitForExit();
}
using (StreamReader reader = p.StandardOutput)
{
string output = reader.ReadToEnd();
//Console.WriteLine(output);
Utils.WriteLine("INSTALL TCPServer OUTPUT RESULT " + output, ConsoleColor.Magenta);
}
FileInfo fi;
fi = new FileInfo(installPath + "TCPServer" + "\\" + CFG_Server);
int count = 0;
while (!fi.Exists && count < 10)
{
Thread.Sleep(1000);
count++;
SM.Debug("File " + installPath + "TCPServer" + "\\" + CFG_Server + " missing retry " + count);
}
if (count < 10)
{
try
{
XmlDocument xml = new XmlDocument();
xml.Load(installPath + "TCPServer" + "\\" + CFG_Server);
foreach (XmlElement element in xml.SelectNodes("//appSettings"))
{
Int32 step = 0;
foreach (XmlElement element1 in element)
{
step++;
if (step == 3)
{
element1.Attributes[1].InnerText = txTCPPort.Value.ToString();
}
}
}
xml.Save(installPath + "TCPServer" + "\\" + CFG_Server);
}
catch (Exception ex)
{
Console.WriteLine("Modify TCPServer file error: "+ex.ToString());
}
Process p2 = new Process();
p2.StartInfo = info;
p2.Start();
using (StreamWriter sw2 = p2.StandardInput)
{
if (sw2.BaseStream.CanWrite)
{
sw2.WriteLine("net stop TCPServerService");
sw2.WriteLine("net start TCPServerService");
}
sw2.Close();
}
p2.WaitForExit();
}
installNR--;
threadLock = false;
//done
SM.Debug("TCPServer installed");
Console.WriteLine("======================================================");
updateStatus("TCPServer" + " installed", false);
}
private void InstallTCPClient(String IP,String port)
{
Console.WriteLine("======================================================");
SM.Debug("Installing TCPClient");
updateStatus("Installing " + "TCPClient", true);
String fileMSI = "";
string[] fileEntries;
try
{
Utils.WriteEventLog(Program.COMPANY, "Installing TCPClient", EventLogEntryType.Information, 23456);
}
catch (Exception ex)
{
SM.Debug("Error Creating " + Program.COMPANY + " Source EventLog " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
try
{
fileEntries = Directory.GetFiles(kitPath + "TCPClient");
foreach (string fileName in fileEntries)
{
String fileNametmp = fileName.Substring(fileName.LastIndexOf('\\'));
if (fileNametmp.ToUpper().Contains(".MSI") || fileNametmp.Contains(".msi"))
fileMSI = fileNametmp.Remove(0, 1);
}
}
catch (Exception ex)
{
SM.Debug("Error finding MSI " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = p.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "TCPClient" + '"';
sw.WriteLine(kitPath.Substring(0, 2));
sw.WriteLine("cd " + '"' + kitPath + "TCPClient" + '"');
sw.WriteLine(cmd);
Utils.WriteLine($"Installing TCPClient: {cmd}", ConsoleColor.DarkYellow);
}
sw.Close();
p.WaitForExit();
}
using (StreamReader reader = p.StandardOutput)
{
string output = reader.ReadToEnd();
//Console.WriteLine(output);
Utils.WriteLine("INSTALL TCPClient OUTPUT RESULT " + output, ConsoleColor.Magenta);
}
FileInfo fi;
fi = new FileInfo(installPath + "TCPClient" + "\\" + CFG_Client);
int count = 0;
while (!fi.Exists && count < 10)
{
Thread.Sleep(1000);
count++;
SM.Debug("File " + installPath + "TCPClient" + "\\" + CFG_Client + " missing retry " + count);
}
if (count < 10)
{
try
{
XmlDocument xml = new XmlDocument();
xml.Load(installPath + "TCPClient" + "\\" + CFG_Client);
foreach (XmlElement element in xml.SelectNodes("//appSettings"))
{
Int32 step = 0;
foreach (XmlElement element1 in element)
{
step++;
if (step == 3)
{
element1.Attributes[1].InnerText = txTCPPort.Value.ToString();
}
if (step == 4)
{
element1.Attributes[1].InnerText = txTCPIP.Text;
}
}
}
xml.Save(installPath + "TCPClient" + "\\" + CFG_Client);
}
catch (Exception ex)
{
Console.WriteLine("Modify TCPClient file error:"+ex.ToString());
}
Process p2 = new Process();
p2.StartInfo = info;
p2.Start();
StreamWriter sw2 = p2.StandardInput;
if (sw2.BaseStream.CanWrite)
{
sw2.WriteLine("net stop TCPClientService");
sw2.WriteLine("net start TCPClientService");
}
sw2.Close();
p2.WaitForExit();
}
installNR--;
threadLock = false;
//done
SM.Debug("TCPClient installed");
Console.WriteLine("======================================================");
updateStatus("TCPClient" + " installed", false);
}
private void InstallSDMobile(string ip, String port)
{
Console.WriteLine("======================================================");
SM.Debug("Installing Appserver for SDMobile");
updateStatus("Installing " + "Application Server Mobile", true);
String fileMSI = "";
string[] fileEntries;
try
{
fileEntries = Directory.GetFiles(kitPath + "AppServerMobile");
foreach (string fileName in fileEntries)
{
String fileNametmp = fileName.Substring(fileName.LastIndexOf('\\'));
if (fileNametmp.ToUpper().Contains(".MSI") || fileNametmp.Contains(".msi"))
fileMSI = fileNametmp.Remove(0, 1);
}
}
catch (Exception ex)
{
SM.Debug("Error finding MSI " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
StreamWriter sw = p.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine(kitPath.Substring(0, 2));
sw.WriteLine("cd " + '"' + kitPath + "AppServerMobile" + '"');
sw.WriteLine("msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "AppServerMobile" + '"');
}
sw.Close();
p.WaitForExit();
StreamReader reader = p.StandardOutput;
string output = reader.ReadToEnd();
//Console.WriteLine(output);
FileInfo fi;
fi = new FileInfo(installPath + "AppServerMobile" + "\\" + CFG_APP);
int count = 0;
while (!fi.Exists && count < 10)
{
Thread.Sleep(1000);
count++;
SM.Debug("File " + installPath + "AppServerMobile" + "\\" + CFG_APP + " missing retry " + count);
}
try
{
//set DB IP
source = new IniConfigSource(installPath + "AppServerMobile" + "\\" + CFG_APP);
source.Configs["Database"].Set("IP", ip);
source.Configs["Database"].Set("Port", port);
//source.Configs["Recordings"].Set("IP", ip);
source.Save();
SM.Debug("Added new DB ip to SD config file");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
installNR--;
threadLock = false;
//done
SM.Debug("SDMobile installed");
Console.WriteLine("======================================================");
updateStatus("AppServerMobile" + " installed", false);
CreateShortcut(installPath + "AppServerMobile" + "\\", "AppServerMobile.exe", "AppServer for SafeDispatch Mobile");
//CreateShortcut(installPath + "SafeSyt\\", "SafeSyt.exe", "SafeSyt");
}
private void InstallGW(string ip, String port)
{
Console.WriteLine("======================================================");
SM.Debug("Installing GW");
if ((radioType == RADIOTYPE.MOTO)&&(dropGatewayList.SelectedIndex == 4))
updateStatus("Installing " + GatewayNAME, true);
else updateStatus("Installing " + GatewayNAME + " gateway", true);
String fileMSI = "";
string[] fileEntries = new string[] { };
string path = "";
try
{
if (radioType == RADIOTYPE.MOTO)
{
string sourceFolder = getSourceFolderBasedOnSelectedGateway();
if (!string.IsNullOrEmpty(sourceFolder))
fileEntries = Directory.GetFiles(path = (kitPath + "//" + sourceFolder));
else
Utils.WriteLine("Invalid sourcePath", ConsoleColor.Red);
}
else if (radioType == RADIOTYPE.LISF)
{
if (dropGatewayList.SelectedIndex == 0)
fileEntries = Directory.GetFiles(path = (kitPath + DirName_Sepura3T_SDR));
else
fileEntries = Directory.GetFiles(path = (kitPath + DirName_Tetra_SDR));
}
else if (radioType == RADIOTYPE.LINX)
{
fileEntries = Directory.GetFiles(path = (kitPath + "gateway"));
}
else if(radioType == RADIOTYPE.LINXB)
{
if (dropGatewayList.SelectedIndex == 0) fileEntries = Directory.GetFiles(path = (kitPath + "LINX_gateway"));
else fileEntries = Directory.GetFiles(path = (kitPath + "Mototrbo_gateway"));
}
else
fileEntries = Directory.GetFiles(path = (kitPath + "gateway"));
foreach (string fileName in fileEntries)
{
String fileNametmp = fileName.Substring(fileName.LastIndexOf('\\'));
if (fileNametmp.ToUpper().Contains(".MSI") || fileNametmp.Contains(".msi"))
fileMSI = fileNametmp.Remove(0, 1);
}
}
catch (Exception ex)
{
SM.Debug("Error finding MSI " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw2 = p.StandardInput)
{
if (sw2.BaseStream.CanWrite)
{
sw2.WriteLine(kitPath.Substring(0, 2));
if (radioType == RADIOTYPE.MOTO)
{
if (dropGatewayList.SelectedIndex == 0)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "Gateway" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
else if (dropGatewayList.SelectedIndex == 1)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "Tetra" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
else if (dropGatewayList.SelectedIndex == 2)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "CPlus" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
else if (dropGatewayList.SelectedIndex == 3)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "Tetra_SDR" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
else if (dropGatewayList.SelectedIndex == 4)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "Repeater_Gateway" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
sw2.WriteLine(kitPath.Substring(0, 2));
sw2.WriteLine("cd " + '"' + kitPath + "PostgreSD" + '"');
sw2.WriteLine("unzip -o ftdi_driver.zip -d " + '"' + installPath + "ftdi_driver" + '"');
sw2.WriteLine(installPath.Substring(0, 2));
sw2.WriteLine("cd " + '"' + installPath + "ftdi_driver" + '"');
sw2.WriteLine("dpinst-amd64.exe /F");
}
else if (dropGatewayList.SelectedIndex == 5)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "SMC_Gateway" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
}
else if (radioType == RADIOTYPE.LISF)
{
if (dropGatewayList.SelectedIndex == 0)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + DirName_Sepura3T_SDR + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
else if (dropGatewayList.SelectedIndex == 1)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + DirName_Tetra_SDR + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
}
else if (radioType == RADIOTYPE.LINX)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "Gateway" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
else if (radioType == RADIOTYPE.LINXB)
{
if (dropGatewayList.SelectedIndex == 0)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "LINX_gateway" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
else if (dropGatewayList.SelectedIndex == 1)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "Mototrbo_gateway" + '"';
sw2.WriteLine("cd " + '"' + path + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
}
else
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "Gateway" + '"';
sw2.WriteLine("cd " + '"' + kitPath + "Gateway" + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing Gateway: {cmd}", ConsoleColor.DarkYellow);
}
}
sw2.Close();
p.WaitForExit();
}
using (StreamReader reader = p.StandardOutput)
{
string output = reader.ReadToEnd();
//Console.WriteLine(output);
Utils.WriteLine("INSTALL Gateway OUTPUT RESULT " + output, ConsoleColor.Magenta);
}
if (radioType == RADIOTYPE.SIMOCO || radioType == RADIOTYPE.EXCERA)
CFG_GW = "configSD.ini";
FileInfo fi = new FileInfo(installPath + "Gateway\\" + CFG_GW);
if (radioType == RADIOTYPE.MOTO)
{
if (dropGatewayList.SelectedIndex == 1) fi = new FileInfo(installPath + "Tetra\\" + CFG_GW);
else if (dropGatewayList.SelectedIndex == 2) fi = new FileInfo(installPath + "CPlus\\" + CFG_GW);
else if (dropGatewayList.SelectedIndex == 3) fi = new FileInfo(installPath + "Tetra_SDR\\" + CFG_GW);
else if (dropGatewayList.SelectedIndex == 4)
{
CFG_GW = "configSD.ini";
fi = new FileInfo(installPath + "Repeater_Gateway\\" + CFG_GW);
}
else if (dropGatewayList.SelectedIndex == 5) fi = new FileInfo(installPath + "SMC_Gateway\\" + CFG_GW);
}
else if (radioType == RADIOTYPE.LISF)
{
if (dropGatewayList.SelectedIndex == 0)
fi = new FileInfo(installPath + DirName_Sepura3T_SDR + "\\" + CFG_GW);
else
fi = new FileInfo(installPath + DirName_Tetra_SDR + "\\" + CFG_GW);
}
else if (radioType == RADIOTYPE.LINX)
{
CFG_GW = "configSD.ini";
fi = new FileInfo(installPath + "Gateway\\" + CFG_GW);
}
if (radioType == RADIOTYPE.LINXB)
{
if (dropGatewayList.SelectedIndex == 0) fi = new FileInfo(installPath + "LINX_gateway\\" + CFG_GW);
else if (dropGatewayList.SelectedIndex == 1) fi = new FileInfo(installPath + "Mototrbo_gateway\\" + CFG_GW);
}
int count = 0;
while (!fi.Exists && count < 10)
{
Thread.Sleep(1000);
count++;
SM.Debug("File " + installPath + "Gateway\\" + CFG_GW + " missing retry " + count);
}
try
{
//set DB IP
source = null;
Boolean writeIP = false;
if (radioType == RADIOTYPE.MOTO)
{
if (dropGatewayList.SelectedIndex == 0 ||
dropGatewayList.SelectedIndex == 4 ||
dropGatewayList.SelectedIndex == 5)
writeIP = true;
}
else
writeIP = true;
if (writeIP)
{
if (radioType == RADIOTYPE.LISF)
{
Utils.WriteLine("LISF Gateway config file is " + fi.FullName);
source = new IniConfigSource(fi.FullName);
source.Configs["Server"].Set("IP", ip);
}
else
{
Utils.WriteLine("Gateway config file is : " + installPath + "Gateway\\" + CFG_GW);
source = new IniConfigSource(fi.FullName);// installPath + "Gateway\\" + CFG_GW);
if (radioType == RADIOTYPE.LINX || radioType == RADIOTYPE.LINXB || radioType == RADIOTYPE.SIMOCO)
source.Configs["Server"].Set("IP", ip);
else
{
//aici doar gatewayul de motorola are registration cu app serverul
if ((radioType == RADIOTYPE.MOTO && (dropGatewayList.SelectedIndex == 0 ||
dropGatewayList.SelectedIndex == 4 || dropGatewayList.SelectedIndex == 5)) || radioType == RADIOTYPE.HYT)
source.Configs["Server"].Set("IP", ip);
// la restul in blana
else
{
source.Configs["Database"].Set("IP", ip);
source.Configs["Database"].Set("Port", port);
}
}
if (radioType == RADIOTYPE.HARRIS)
source.Configs["Type"].Set("Hytera", "false");
}
//source.Configs["Database"].Set("IP", ip);
//source.Configs["Database"].Set("Port", port);
source.Save();
}
SM.Debug("Added new DB ip to GW config file");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
installNR--;
SM.Debug("Gateway installed");
Console.WriteLine("======================================================");
threadLock = false;
updateStatus("Gateway installed", false);
if (radioType == RADIOTYPE.MOTO)
{
string sourceFolder = getSourceFolderBasedOnSelectedGateway();
if (!string.IsNullOrEmpty(sourceFolder))
CreateShortcut(installPath + sourceFolder + "\\", EXE_Gateway, GatewayNAME + " Gateway");
else
Utils.WriteLine("Invalid sourcePath", ConsoleColor.Red);
}
else if (radioType == RADIOTYPE.LISF)
{
if (dropGatewayList.SelectedIndex == 0) CreateShortcut(installPath + DirName_Sepura3T_SDR + "\\", EXE_Gateway, GatewayNAME + " Gateway");
else if (dropGatewayList.SelectedIndex == 1) CreateShortcut(installPath + DirName_Tetra_SDR + "\\", EXE_Gateway, GatewayNAME + " Gateway");
}
else if(radioType == RADIOTYPE.LINX)
CreateShortcut(installPath + "Gateway\\", EXE_Gateway, GatewayNAME + " Gateway");
else if (radioType == RADIOTYPE.LINXB)
{
if (dropGatewayList.SelectedIndex == 0) CreateShortcut(installPath + "LINX_gateway\\", EXE_Gateway, GatewayNAME + " Gateway");
else if (dropGatewayList.SelectedIndex == 1) CreateShortcut(installPath + "Mototrbo_gateway\\", EXE_Gateway, GatewayNAME + " Gateway");
}
else
CreateShortcut(installPath + "Gateway\\", EXE_Gateway, GatewayNAME+" Gateway");
}
private void InstallSUM(string ip, String port)
{
Console.WriteLine("======================================================");
SM.Debug("Installing AdministrativeModule");
updateStatus("Installing AdministrativeModule", true);
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
String fileMSI = "";
string[] fileEntries;
try
{
fileEntries = Directory.GetFiles(kitPath + "AdministrativeModule");
foreach (string fileName in fileEntries)
{
String fileNametmp = fileName.Substring(fileName.LastIndexOf('\\'));
//Console.WriteLine("FILES:"+fileNametmp.ToUpper() +" NORMAL:"+fileNametmp);
if (fileNametmp.ToUpper().Contains(".MSI") || fileNametmp.Contains(".msi"))
{
fileMSI = fileNametmp.Remove(0, 1);
Console.WriteLine("Find MSI:"+fileMSI);
}
}
}
catch (Exception ex)
{
SM.Debug("Error finding MSI " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
using (StreamWriter sw2 = p.StandardInput)
{
if (sw2.BaseStream.CanWrite)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "AdministrativeModule" + '"';
sw2.WriteLine(kitPath.Substring(0, 2));
sw2.WriteLine("cd " + '"' + kitPath + "AdministrativeModule" + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing AdministrativeModule: {cmd}", ConsoleColor.DarkYellow);
}
sw2.Close();
p.WaitForExit();
}
using (StreamReader reader = p.StandardOutput)
{
string output = reader.ReadToEnd();
Utils.WriteLine("INSTALL AdministrativeModule OUTPUT RESULT " + output, ConsoleColor.Magenta);
}
FileInfo fi = new FileInfo(installPath + "AdministrativeModule\\" + CFG_SUM);
int count = 0;
while (!fi.Exists && count < 10)
{
Thread.Sleep(1000);
count++;
Console.WriteLine("File " + installPath + "AdministrativeModule\\" + CFG_SUM + " missing retry " + count);
}
try
{
//set DB IP
source = new IniConfigSource(installPath + "AdministrativeModule\\" + CFG_SUM);
source.Configs["Server"].Set("IP", ip);
//source.Configs["Database"].Set("IP", ip);
//source.Configs["Database"].Set("Port", port);
source.Save();
//SM.Debug("Added new DB ip to SUM config file");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
installNR--;
SM.Debug("AdministrativeModule installed.");
Console.WriteLine("======================================================");
threadLock = false;
updateStatus("AdministrativeModule installed", false);
CreateShortcut(installPath + "AdministrativeModule\\", "AdministrativeModule.exe", "AdministrativeModule");
// try
// {
// string destinationPath = installPath + "AdministrativeModule\\AdminModule.exe";
// string sourcePath = kitPath + "Gateway\\AdminModule.exe";
// if (radioType == RADIOTYPE.MOTO)
// {
// if (dropGatewayList.SelectedIndex == 1) IO.File.Copy(kitPath + "Tetra\\AdminModule.exe", destinationPath, true);
// else if (dropGatewayList.SelectedIndex == 2) IO.File.Copy(kitPath + "CPlus\\AdminModule.exe", destinationPath, true);
// else if (dropGatewayList.SelectedIndex == 3) IO.File.Copy(kitPath + "Tetra\\AdminModule.exe", destinationPath, true);
// else if (dropGatewayList.SelectedIndex == 4) IO.File.Copy(kitPath + "Repeater_Gateway\\AdminModule.exe", destinationPath, true);
// }
// if (radioType == RADIOTYPE.LISF)
// {
// if (dropGatewayList.SelectedIndex == 0) IO.File.Copy(kitPath + DirName_Sepura3T_SDR + "\\AdminModule.exe", destinationPath, true);
// else if (dropGatewayList.SelectedIndex == 1) IO.File.Copy(kitPath + DirName_Tetra_SDR + "\\AdminModule.exe", destinationPath, true);
// }
// else if (radioType == RADIOTYPE.LINX || radioType == RADIOTYPE.LINXB)
// IO.File.Copy(sourcePath, destinationPath, true);
// else if (radioType == RADIOTYPE.EXCERA)
// IO.File.Copy(sourcePath, destinationPath, true);
// else if (radioType == RADIOTYPE.HYT)
// IO.File.Copy(sourcePath, destinationPath, true);
// }
// catch (Exception ex)
// {
// SM.Debug("Error on copy files:"+ex.ToString());
// }
}
string linxExePath = "";
private void InstallAPP(string ip,String port)
{
updateStatus("Installing Application server", true);
Console.WriteLine("======================================================");
SM.Debug("Installing Application Server");
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
String fileMSI = "";
string[] fileEntries;
try
{
fileEntries = Directory.GetFiles(kitPath + "AppServer");
foreach (string fileName in fileEntries)
{
String fileNametmp = fileName.Substring(fileName.LastIndexOf('\\'));
if (fileNametmp.ToUpper().Contains(".MSI") || fileNametmp.Contains(".msi"))
fileMSI = fileNametmp.Remove(0, 1);
}
}
catch (Exception ex)
{
SM.Debug("Error finding MSI " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
using (StreamWriter sw2 = p.StandardInput)
{
if (sw2.BaseStream.CanWrite)
{
String cmd = "msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "AppServer" + '"';
sw2.WriteLine(kitPath.Substring(0, 2));
sw2.WriteLine("cd " + '"' + kitPath + "AppServer" + '"');
sw2.WriteLine(cmd);
Utils.WriteLine($"Installing AppServer: {cmd}", ConsoleColor.DarkYellow);
}
sw2.Close();
p.WaitForExit();
}
using (StreamReader reader = p.StandardOutput)
{
string output = reader.ReadToEnd();
Utils.WriteLine("INSTALL AppServer OUTPUT RESULT " + output, ConsoleColor.Magenta);
//Console.WriteLine(output);
}
FileInfo fi = new FileInfo(installPath + "AppServer\\" + CFG_APP);
int count = 0;
while (!fi.Exists && count<10)
{
Thread.Sleep(1000);
count++;
SM.Debug("File " + installPath + "AppServer\\" + CFG_APP + " missing retry " + count);
}
try
{
//set DB IP
source = new IniConfigSource(installPath + "AppServer\\" + CFG_APP);
source.Configs["Database"].Set("IP", ip);
source.Configs["Database"].Set("Port", port);
source.Save();
SM.Debug("Added new DB ip to appserver config file");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
//start service
//StartService("AppService", 3000);
installNR--;
SM.Debug("Aplication AppServer installed");
Console.WriteLine("======================================================");
threadLock = false;
updateStatus("Aplication AppServer installed", false);
CreateShortcut(installPath + "AppServer\\", "AppServer.exe", "AppServer");
//LINX run installer
if (radioType == RADIOTYPE.LINX || radioType == RADIOTYPE.LINXB)
{
linxExePath = kitPath + "LINX Server Setup.exe";
if (IO.File.Exists(linxExePath) && !Directory.Exists(installPath + "LINX Server"))
{
Process.Start(linxExePath);
}
}
}
private void InstallUpd(string ip, String port)
{
updateStatus("Installing updater", true);
Console.WriteLine("======================================================");
SM.Debug("Installing Updater");
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
String fileMSI = "";
string[] fileEntries;
try
{
fileEntries = Directory.GetFiles(kitPath + "Updater");
foreach (string fileName in fileEntries)
{
String fileNametmp = fileName.Substring(fileName.LastIndexOf('\\'));
if (fileNametmp.ToUpper().Contains(".MSI") || fileNametmp.Contains(".msi"))
fileMSI = fileNametmp.Remove(0, 1);
}
}
catch (Exception ex)
{
SM.Debug("Error finding MSI " + ex.Source + "\n" + ex.Message + "\n" + ex.StackTrace);
}
StreamWriter sw2 = p.StandardInput;
if (sw2.BaseStream.CanWrite)
{
sw2.WriteLine(kitPath.Substring(0, 2));
sw2.WriteLine("cd " + '"' + kitPath + "Updater" + '"');
sw2.WriteLine("msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + "Updater" + '"');
}
sw2.Close();
p.WaitForExit();
StreamReader reader = p.StandardOutput;
string output = reader.ReadToEnd();
//Console.WriteLine(output);
FileInfo fi = new FileInfo(installPath + "Updater\\" + CFG_Upd);
int count = 0;
while (!fi.Exists && count < 10)
{
Thread.Sleep(1000);
count++;
SM.Debug("File " + installPath + "Updater\\" + CFG_Upd + " missing retry " + count);
}
try
{
//set DB IP
source = new IniConfigSource(installPath + "Updater\\" + CFG_Upd);
source.Configs["DB connect"].Set("serverIP", ip);
source.Configs["DB connect"].Set("port", port);
if(radioType == RADIOTYPE.MOTO)
{
// TETRA case
if (dropGatewayList.SelectedIndex == 1)
{
source.Configs["Local"].Set("TetraEXEPath", "..//Tetra//Tetra_GW.exe");
source.Configs["Local"].Set("GatewayCFGPath", "..//Tetra//GWconfig.ini");
}
// Connect Plus case
else if (dropGatewayList.SelectedIndex == 2)
{
source.Configs["Local"].Set("GatewayEXEPath", "..//CPlus//CPlus_GW.exe");
source.Configs["Local"].Set("GatewayCFGPath", "..//CPlus//GWconfig.ini");
}
// Tetra case
else if (dropGatewayList.SelectedIndex == 3)
{
source.Configs["Local"].Set("GatewayEXEPath", "..//Tetra_SDR//SDRgateway.exe");
source.Configs["Local"].Set("GatewayCFGPath", "..//Tetra_SDR//GWconfig.ini");
}
// Repeater case
else if (dropGatewayList.SelectedIndex == 4)
{
source.Configs["Local"].Set("GatewayEXEPath", "..//Repeater_Gateway//MotoRepeater.exe");
source.Configs["Local"].Set("GatewayCFGPath", "..//Repeater_Gateway//configSD.ini");
}
}
else if (radioType == RADIOTYPE.LISF)
{
// TETRA case
if (dropGatewayList.SelectedIndex == 0)
{
source.Configs["Local"].Set("TetraEXEPath", $"..//{DirName_Sepura3T_SDR}//Sepura3T_SDR.exe");
source.Configs["Local"].Set("GatewayCFGPath", $"..//{DirName_Sepura3T_SDR}//GWconfig.ini");
}
// Tetra SDR case
else if (dropGatewayList.SelectedIndex == 1)
{
source.Configs["Local"].Set("GatewayEXEPath", $"..//{DirName_Tetra_SDR}//SDRgateway.exe");
source.Configs["Local"].Set("GatewayCFGPath", $"..//{DirName_Tetra_SDR}//GWconfig.ini");
}
}
source.Save();
SM.Debug("Added new DB ip to updater config file");
}
catch (Exception ex)
{
SM.Debug(ex.ToString());
}
//start service
//StartService("AppService", 3000);
installNR--;
threadLock = false;
SM.Debug("Updater installed");
Console.WriteLine("======================================================");
updateStatus("Updater installed", false);
try
{
string destinationPath = installPath + "Updater\\SoftwareUpdate.exe";
if (radioType == RADIOTYPE.MOTO)
{
if (dropGatewayList.SelectedIndex == 1) IO.File.Copy(kitPath + "Tetra\\SoftwareUpdate.exe", destinationPath, true);
else if (dropGatewayList.SelectedIndex == 2) IO.File.Copy(kitPath + "CPlus\\SoftwareUpdate.exe", destinationPath, true);
else if (dropGatewayList.SelectedIndex == 3) IO.File.Copy(kitPath + "Tetra\\SoftwareUpdate.exe", destinationPath, true);
else if (dropGatewayList.SelectedIndex == 4) IO.File.Copy(kitPath + "Repeater_Gateway\\SoftwareUpdate.exe", destinationPath, true);
}
}
catch (Exception ex)
{
SM.Debug("Error on copy files Updater:" + ex.ToString());
}
CreateShortcut(installPath + "Updater\\", "SoftwareUpdate.exe", "SoftwareUpdate");
CreateShortcut(installPath + "Updater\\", Program.COMPANY + "RemoteSupport.exe", Program.COMPANY + " Remote Support");
}
private WshShellClass WshShell;
private void DeleteShortcut(String ShortcutName)
{
try
{
string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
// Delete old shortcut if it exist
string fullPath = desktopFolder + "\\" + ShortcutName + ".lnk";
if (IO.File.Exists(fullPath))
{
IO.File.Delete(fullPath);
Utils.WriteLine($" Delete shortcut [{fullPath}]");
}
string programsFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
fullPath = programsFolder + "\\" + Program.COMPANY + "\\" + ShortcutName + ".lnk";
if (IO.File.Exists(fullPath))
{
IO.File.Delete(fullPath);
Utils.WriteLine($" Delete shortcut [{fullPath}]");
}
if (Directory.Exists(programsFolder + "\\" + Program.COMPANY))
{
string[] fileEntries;
fileEntries = Directory.GetFiles(programsFolder + "\\" + Program.COMPANY);
if (fileEntries.Count() == 0)
Directory.Delete(programsFolder + "\\" + Program.COMPANY);
}
}
catch (Exception ex)
{
Utils.WriteLine($"Error on delete shortcut [{ShortcutName}]:" + ex.ToString());
}
}
private void CreateShortcut(String appPath, string exeName, String ShortcutName)
{
try
{
string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
// Delete old shortcut if it exist
string destopPath = desktopFolder + "\\" + ShortcutName + ".lnk";
if (IO.File.Exists(destopPath))
{
IO.File.Delete(destopPath);
Utils.WriteLine($"Delete existing shortcut [{destopPath}]");
}
Utils.WriteLine($"CreateShortcut for {ShortcutName} targetting {destopPath}");
// Create a new instance of WshShellClass
WshShell = new WshShellClass();
// Create the shortcut
IWshRuntimeLibrary.IWshShortcut MyShortcut;
// Choose the path for the shortcut
MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateShortcut(destopPath);
// Where the shortcut should point to
MyShortcut.TargetPath = appPath + exeName;
//add startDIr
MyShortcut.WorkingDirectory = appPath;
// Description for the shortcut
MyShortcut.Description = ShortcutName;
// Create the shortcut at the given path
MyShortcut.Save();
#region Create Admin Privileges for Shortcut
// HACKHACK: update the link's byte to indicate that this is a admin shortcut
using (FileStream fs = new FileStream(destopPath, FileMode.Open, FileAccess.ReadWrite))
{
fs.Seek(21, SeekOrigin.Begin);
fs.WriteByte(0x22);
}
#endregion
string programsFolder = Environment.GetFolderPath(Environment.SpecialFolder.Programs);
if (!Directory.Exists(programsFolder + "\\" + Program.COMPANY))
Directory.CreateDirectory(programsFolder + "\\" + Program.COMPANY);
string shortcutPath2 = programsFolder + "\\" + Program.COMPANY + "\\" + ShortcutName + ".lnk";
if (IO.File.Exists(shortcutPath2))
{
IO.File.Delete(shortcutPath2);
}
Utils.WriteLine($"CreateShortcut for {ShortcutName} targetting {shortcutPath2}");
// Create the shortcut
IWshRuntimeLibrary.IWshShortcut MyShortcut2;
// Choose the path for the shortcut
MyShortcut2 = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateShortcut(shortcutPath2);
// Where the shortcut should point to
MyShortcut2.TargetPath = appPath + exeName;
//add startDIr
MyShortcut2.WorkingDirectory = appPath;
// Description for the shortcut
MyShortcut2.Description = ShortcutName;
// Create the shortcut at the given path
// Console.WriteLine("Shortcut 2:" + Environment.GetFolderPath(Environment.SpecialFolder.Programs) + "\\SafeMobile\\" + ShortcutName + ".lnk");
MyShortcut2.Save();
#region Create Admin Privileges for Shortcut
// HACKHACK: update the link's byte to indicate that this is a admin shortcut
using (FileStream fs = new FileStream(shortcutPath2, FileMode.Open, FileAccess.ReadWrite))
{
fs.Seek(21, SeekOrigin.Begin);
fs.WriteByte(0x22);
}
#endregion
}
catch (Exception ex)
{
Console.WriteLine("Error on create shortcut:"+ex.ToString());
}
}
public static void StartService(string serviceName, int timeoutMilliseconds)
{
ServiceController service = new ServiceController(serviceName);
try
{
Utils.WriteLine("Starting Service :" + serviceName);
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch(Exception ex)
{
Utils.WriteLine("ERROR starting Service :" +serviceName);
Utils.WriteLine(ex.ToString());
}
Utils.WriteLine("Service :" + serviceName + " started!!!");
}
static public void CopyFolder(string sourceFolder, string destFolder)
{
try
{
if (!Directory.Exists(sourceFolder))
{
Console.WriteLine("Tools folder not found in kit folder");
return;
}
if (!Directory.Exists(destFolder))
Directory.CreateDirectory(destFolder);
string[] files = Directory.GetFiles(sourceFolder);
foreach (string file in files)
{
string name = Path.GetFileName(file);
string dest = Path.Combine(destFolder, name);
IO.File.Copy(file, dest);
}
string[] folders = Directory.GetDirectories(sourceFolder);
foreach (string folder in folders)
{
string name = Path.GetFileName(folder);
string dest = Path.Combine(destFolder, name);
CopyFolder(folder, dest);
}
}catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
#endregion
#region Registry Entry Management
private bool CreateAppEntry(String appFolder)
{
// Write path to the registry
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software", true);
if (key.OpenSubKey(Program.COMPANY) == null)
key.CreateSubKey(Program.COMPANY);
key = key.OpenSubKey(Program.COMPANY, true);
try
{
key.CreateSubKey(appFolder);
return true;
}
catch(Exception)
{
return false;
}
}
private bool InsertRegValue(String regKey, String regValue, String appFolder)
{
// Write path to the registry
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software", true);
if (key.OpenSubKey(Program.COMPANY) == null)
key.CreateSubKey(Program.COMPANY);
key = key.OpenSubKey(Program.COMPANY, true);
key = key.OpenSubKey(appFolder, true);
try
{
key.SetValue(regKey, regValue);
return true;
}
catch (Exception)
{
return false;
}
}
private String GetRegValue(String regKey, String appFolder)
{
// Write path to the registry
string path = "Software\\" + Program.COMPANY
+ (appFolder.Equals(Program.COMPANY) ? "" : "\\" + appFolder);
RegistryKey key = Registry.CurrentUser.OpenSubKey(path);
if (key != null)
{
Utils.WriteLine("Folder " + appFolder + " exists", ConsoleColor.DarkCyan);
try
{
return (String)key.GetValue(regKey);
}
catch (Exception)
{
return String.Empty;
}
}
else
{
// Key is not in HKEY_CURRENT_USER /SOFTWARE /SafeMobile
// Because of registry virtualization, it may be in HKEY_USERS/ SomeUser / SOFTWARE / ....
// Check all users key form HKEY_USERS
foreach (string user in Registry.Users.GetSubKeyNames())
{
key = Registry.Users.OpenSubKey(user + "\\" + path);
if (key != null)
{
Utils.WriteLine("Folder " + appFolder + "exists", ConsoleColor.DarkCyan);
try
{
return (String)key.GetValue(regKey);
}
catch (Exception)
{
return String.Empty;
}
}
}
return String.Empty;
}
}
private void DeleteRegValue(String regKey, String appFolder)
{
// Write path to the registry
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\" + Program.COMPANY
+ (appFolder.Equals(Program.COMPANY) ? "" : "\\" + appFolder), true);
if (key != null)
{
try
{
key.DeleteValue(regKey);
}
catch (Exception)
{
}
}
}
private void DeleteAppKey(String appFolder)
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\" + Program.COMPANY, true))
{
if (key == null)
{
// Key doesn't exist. Do whatever you want to handle
// this case
}
else
{
try
{
key.DeleteSubKeyTree(appFolder);
}
catch (Exception ) { }
}
}
}
#endregion
private void replace_portForDB(String Path, String text, String replace)
{
try
{
Int32 testpathCnt=0;
while (testpathCnt<5)
{
Thread.Sleep(1000);
SM.Debug("Wait 1 second to see if database is unziped");
if (IO.File.Exists(Path)) testpathCnt = 100;
testpathCnt++;
}
TextReader tr = new StreamReader(Path);
String w = tr.ReadToEnd();
String new_file = w.Replace(text, replace);
tr.Close();
TextWriter tw = new StreamWriter(Path);
tw.Write(new_file);
tw.Close();
}
catch (Exception ex)
{
SM.Debug("Unable to change the port form database:"+ex.ToString());
}
}
private void ChangeFolder_Click(object sender, EventArgs e)
{
FolderBrowserDialog dialog = new FolderBrowserDialog();
dialog.Description = "Select instalation folder";
dialog.RootFolder = Environment.SpecialFolder.MyComputer;
if (dialog.ShowDialog() == DialogResult.OK)
{
string folder = dialog.SelectedPath;
tbInstallPath.Text = folder;
}
}
private void updateStatus(string text,bool waitBar)
{
updateStatusCallback d = new updateStatusCallback(changeStatus);
this.Invoke(d, new object[] {text,waitBar });
}
delegate void updateStatusCallback(string text, bool waitBar);
public void changeStatus(string text, bool waitBar)
{
if (waitBar) radWaitingBar1.StartWaiting();
else radWaitingBar1.StopWaiting();
lbStatus.Text = text;
SM.Debug(installNR + " installs remaning");
if (installNR == 0 )
{
if (!uninstall)
{
radWaitingBar1.Visible = false;
lbStatus.Text = "Installation completed!!";
btnInstall.Enabled = true;
btnUnInstall.Enabled = true;
TestInstall();
}
else
{
try
{
if (cbDBinstall.Checked)
{
//try again to delete DB
int backUp = 0;
while (Directory.Exists(installPath + "postgresql"))
{
try
{
Directory.Delete(installPath + "postgresql", true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
backUp++;
if (backUp > 10) break;
Thread.Sleep(500);
}
}
}
catch (Exception) { };
radWaitingBar1.Visible = false;
lbStatus.Text = "Uninstall completed!!";
btnUnInstall.Enabled = true;
btnInstall.Enabled = true;
TestUninstall();
}
}
}
#region uninstall
private bool uninstall = false;
private void btnUnInstall_Click(object sender, EventArgs e)
{
uninstall_hash = new Hashtable();
DialogResult dr = RadMessageBox.Show("Please make sure that all programs that you wish to uninstall are closed!!!\n\r This process will delete all your save data for "
+ Program.COMPANY + " applications that are checked!!!\n\r Do you want to continue?", "Warning", MessageBoxButtons.OKCancel, RadMessageIcon.Exclamation);
if (dr != DialogResult.OK)
return;
btnUnInstall.Enabled = false;
uninstall = true;
radWaitingBar1.Visible = true;
installPath = tbInstallPath.Text + "\\";
//if no app selected return
if (!cbDBinstall.Checked && !cbGWinstall.Checked
&& !cbSDinstall.Checked && !cbSUMinstall.Checked && !AdvanceSettings)
{
RadMessageBox.Show("Please select an application for uninstalling");
radWaitingBar1.Visible = false;
lbStatus.Text = "Please select an application for uninstalling!!";
btnUnInstall.Enabled = true;
return;
}
if (8 == IntPtr.Size
|| (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
{
if (installPath.Contains("Program Files") && !installPath.Contains("Program Files (x86)"))
installPath = installPath.Replace("Program Files", "Program Files (x86)");
}
else SystemType32 = true;
string var = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432");
Console.WriteLine(var);
installPath = GetRegValue("Path", Program.COMPANY);
Utils.WriteLine("GetRegValue " + installPath, ConsoleColor.Cyan);
if (installPath != null && installPath.Length > 1)
tbInstallPath.Text = installPath;
installPath += "\\";
btnInstall.Enabled = false;
if (cbSDinstall.Checked)
{
App app = App.DISPATCH_MOTOROLA;
switch (radioType)
{
case RADIOTYPE.MOTO: app = App.DISPATCH_MOTOROLA; break;
case RADIOTYPE.HYT: app = App.DISPATCH_HYTERA; AppNAME = "SafeSyt"; break;
case RADIOTYPE.HARRIS: app = App.DISPATCH_HARRIS; AppNAME = "Vision"; break;
case RADIOTYPE.ATLAS: app = App.DISPATCH_ATLAS; AppNAME = "Atl25"; break;
case RADIOTYPE.SIMOCO: app = App.DISPATCH_SIMOCO; AppNAME = "SimocoDispatch"; break;
case RADIOTYPE.LINX: app = App.DISPATCH_LINX; AppNAME = "LINXDispatch"; break;
case RADIOTYPE.LINXB: app = App.DISPATCH_LINX; AppNAME = "LINXDispatch"; break;
default: app = App.DISPATCH_MOTOROLA; AppNAME = "SafeDispatch"; break;
}
bool isInstalled = false;
isInstalled = IsAppInstalled(app); // Search4App(AppNAME);
if (isInstalled)
{
installNR++;
installThreads[2] = new Thread(new ThreadStart(UnInstallSDcallback));
installThreads[2].IsBackground = true;
installThreads[2].Start();
AddToUninstall_Hash(AppNAME, true);
}
}
if (cbGWinstall.Checked)
{
bool isInstalled = false;
if (radioType == RADIOTYPE.MOTO)
{
if (dropGatewayList.SelectedIndex == 0) isInstalled = IsAppInstalled(App.GW_TRBO);// Search4App("Gateway");
else if (dropGatewayList.SelectedIndex == 1) isInstalled = IsAppInstalled(App.GW_TETRA); // Search4App("Tetra");
else if (dropGatewayList.SelectedIndex == 2) isInstalled = IsAppInstalled(App.GW_CPLUS); // Search4App("CPlus");
else if (dropGatewayList.SelectedIndex == 3) isInstalled = IsAppInstalled(App.GW_TETRA_SDR); // Search4App("Tetra_SDR");
else if (dropGatewayList.SelectedIndex == 4) isInstalled = IsAppInstalled(App.GW_REPEATER); // Search4App("Repeater_Gateway");
else if (dropGatewayList.SelectedIndex == 5) isInstalled = IsAppInstalled(App.GW_SMC);
}
else if (radioType == RADIOTYPE.LISF)
{
if (dropGatewayList.SelectedIndex == 0) isInstalled = IsAppInstalled(App.GW_SEPURA_3T_SDR);// Search4App("Gateway");
else if (dropGatewayList.SelectedIndex == 1) isInstalled = IsAppInstalled(App.GW_TETRA_SDR); // Search4App("Tetra_SDR");
}
else if (radioType == RADIOTYPE.LINX)
{
isInstalled = IsAppInstalled(App.LINX_GATEWAY);
}
else if (radioType == RADIOTYPE.LINXB)
{
if (dropGatewayList.SelectedIndex == 0) isInstalled = IsAppInstalled(App.LINX_GATEWAY);
else if (dropGatewayList.SelectedIndex == 1) isInstalled = IsAppInstalled(App.GW_TRBO);
}
else if(radioType == RADIOTYPE.EXCERA)
isInstalled = IsAppInstalled(App.EXCERA_GATEWAY);
else if (radioType == RADIOTYPE.HYT)
isInstalled = IsAppInstalled(App.GW_HYTERA);
else if (radioType == RADIOTYPE.ATLAS)
isInstalled = IsAppInstalled(App.GW_ASTRO);
else
isInstalled = IsAppInstalled(App.GW_TRBO); // Search4App("Gateway");
if (isInstalled)
{
installNR++;
installThreads[3] = new Thread(new ThreadStart(UnInstallGWcallback));
installThreads[3].IsBackground = true;
installThreads[3].Start();
AddToUninstall_Hash("Gateway", true);
}
}
if (cbSUMinstall.Checked)
{
bool isInstalled = IsAppInstalled(App.ADMIN_MODULE); // Search4App("AdministrativeModule");
if (isInstalled)
{
installNR++;
installThreads[4] = new Thread(new ThreadStart(UnInstallSUMcallback));
installThreads[4].IsBackground = true;
installThreads[4].Start();
AddToUninstall_Hash("AdministrativeModule", true);
}
}
if (cbDBinstall.Checked)
{
bool isInstalled = Search4App("postgresql");
if (isInstalled)
{
installNR++;
installThreads[0] = new Thread(new ThreadStart(UnInstallDBcallback));
installThreads[0].IsBackground = true;
installThreads[0].Start();
AddToUninstall_Hash("postgresql", true);
}
isInstalled = IsAppInstalled(App.APP_SERVER); // Search4App("AppServer");
if (isInstalled)
{
installNR++;
installThreads[1] = new Thread(new ThreadStart(UnInstallAPPcallback));
installThreads[1].IsBackground = true;
installThreads[1].Start();
AddToUninstall_Hash("AppServer", true);
}
}
/*
bool isInstalled2 = Search4App("Updater");
if (isInstalled2)
{
if (unistallUpdater)
{
installNR++;
installThreads[5] = new Thread(new ThreadStart(UnInstallUpdcallback));
installThreads[5].IsBackground = true;
installThreads[5].Start();
AddToUninstall_Hash("Updater", true);
}
}*/
if (cbInstallSDMobile.Checked)
{
bool isInstalled = Search4App("AppServerMobile");
if (isInstalled)
{
installNR++;
installThreads[6] = new Thread(new ThreadStart(UnInstallSDMobilecallback));
installThreads[6].IsBackground = true;
installThreads[6].Start();
AddToUninstall_Hash("AppServerMobile", true);
}
}/*
else
{
if (Search4App("AppServerMobile"))
unistallUpdater = false;
}*/
if (AdvanceSettings)
{
if (rbTCPServer.IsChecked)
{
if (IsAppInstalled(App.TCP_SERVER)) // Search4App("TCPServer"))
{
installNR++;
installThreads[7] = new Thread(new ThreadStart(UnInstallTCPServercallback));
installThreads[7].IsBackground = true;
installThreads[7].Start();
AddToUninstall_Hash("TCPServer", true);
}
}
else if (rbTCPClient.IsChecked)
{
if (IsAppInstalled(App.TCP_CLIENT)) // Search4App("TCPClient"))
{
installNR++;
installThreads[7] = new Thread(new ThreadStart(UnInstallTCPClientcallback));
installThreads[7].IsBackground = true;
installThreads[7].Start();
AddToUninstall_Hash("TCPClient", true);
}
}
}
if (installNR == 0)
{
RadMessageBox.Show("No application found for uninstalling.\n\r Please make sure the path it's correct.");
radWaitingBar1.Visible = false;
lbStatus.Text = "No application found for uninstalling.";
btnUnInstall.Enabled = true;
btnInstall.Enabled = true;
}
}
private void AddToUninstall_Hash(string key, bool value)
{
if (uninstall_hash.ContainsKey(key))
{
uninstall_hash.Remove(key);
}
uninstall_hash.Add(key, value);
}
private void AddToInstall_Hash(string key, bool value)
{
if (install_hash.ContainsKey(key))
{
install_hash.Remove(key);
}
install_hash.Add(key, value);
}
#region Callbacks uninstall
private void UnInstallDBcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallDB();
}
private void UnInstallSDcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallSD();
}
private void UnInstallSDMobilecallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallSDMobile();
}
private void UnInstallTCPServercallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallTCPServer();
}
private void UnInstallTCPClientcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallTCPClient();
}
private void UnInstallGWcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallGW();
}
private void UnInstallSUMcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallSUM();
}
private void UnInstallAPPcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallAPP();
}
private void UnInstallUpdcallback()
{
while (threadLock) Thread.Sleep(400);
threadLock = true;
UnInstallUpd();
}
#endregion
#region Uninstal methods
/// <summary>
/// Uninstall Dispatcher from the hard-disk
/// Also it will be removed from the Add/Remove programs
/// </summary>
private void UnInstallSD()
{
try
{
Utils.WriteLine("Uninstalling SD", ConsoleColor.White);
updateStatus("Uninstall "+AppNAME, true);
// create backup for current config
BackupApp(AppNAME);
App app = App.DISPATCH_MOTOROLA;
// uninstall app using MSI file sillently
if (radioType == RADIOTYPE.LINX || radioType == RADIOTYPE.LINXB)
app = App.DISPATCH_LINX;
else if (radioType == RADIOTYPE.HYT)
app = App.DISPATCH_HYTERA;
else if (radioType == RADIOTYPE.HARRIS)
app = App.DISPATCH_HARRIS;
else if (radioType == RADIOTYPE.ATLAS)
app = App.DISPATCH_ATLAS;
else if (radioType == RADIOTYPE.SIMOCO)
app = App.DISPATCH_SIMOCO;
else if (radioType == RADIOTYPE.EXCERA)
app = App.DISPATCH_EXCERA;
// close app if running
CloseApp(app);
UninstallMSIExec(app);
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
allProducts = new ManagementObjectSearcher(allProductsQuery);
foreach (ManagementObject product in allProducts.Get())
{
PropertyDataCollection col = product.Properties;
bool found_name = false;
bool found_company = false;
foreach (PropertyData property in product.Properties)
{
if (property.Value != null)
{
if (property.Value.ToString() == uInstall_Dispatcher)
{
found_name = true;
}
if (property.Value.ToString() == Program.COMPANY)
{
found_company = true;
}
}
if (found_name && found_company) break;
}
if (found_name && found_company)
{
ManagementObject product2 = new ManagementObject(product.Path.Path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
object result = product.InvokeMethod("Uninstall", null);
//Console.WriteLine("The Uninstall method result is {0}", result.ToString());
if (result.ToString() == "0")
{
Utils.WriteLine("SD uninstaled successfully!");
}
else
{
Utils.WriteLine("Error uninstalling SD!");
}
}
else
{
Utils.WriteLine("SD not found for uninstall");
}
}
}
//delete SD folder
int backUp = 0;
while (Directory.Exists(installPath + AppNAME))
{
try
{
Directory.Delete(installPath + AppNAME, true);
}
catch (Exception ex)
{
Utils.WriteLine($"Uninstall {AppNAME} exception: " + ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
installNR--;
threadLock = false;
Utils.WriteLine(AppNAME+" uninstalled finish", ConsoleColor.White);
DeleteShortcut(ShortcutAppNAME);
updateStatus(AppNAME + " removal succesfull.", false);
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus(AppNAME+" removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine(e.ToString());
updateStatus(AppNAME+" removal failed.", false);
}
}
/// <summary>
/// Uninstall the SafeDispatch Mobile from the hard-disk
/// Also it will be removed from the Add/Remove programs
/// </summary>
private void UnInstallSDMobile()
{
try
{
Utils.WriteLine("Uninstalling SD", ConsoleColor.White);
updateStatus("Uninstall " + "Application server for Dispatch Mobile", true);
// close app if running
//CloseApp(App.DISPATCH_MOBILE);
// create backup for current config
//BackupApp("AppServerMobile");
// uninstall app using MSI file sillently
UninstallMSIExec(App.DISPATCH_MOBILE);
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
allProducts = new ManagementObjectSearcher(allProductsQuery);
foreach (ManagementObject product in allProducts.Get())
{
PropertyDataCollection col = product.Properties;
bool found_name = false;
bool found_company = false;
foreach (PropertyData property in product.Properties)
{
if (property.Value != null)
{
if (property.Value.ToString() == "AppServerMobile")
{
found_name = true;
}
if (property.Value.ToString() == Program.COMPANY)
{
found_company = true;
}
}
if (found_name && found_company) break;
}
if (found_name && found_company)
{
ManagementObject product2 = new ManagementObject(product.Path.Path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
object result = product.InvokeMethod("Uninstall", null);
//Console.WriteLine("The Uninstall method result is {0}", result.ToString());
if (result.ToString() == "0")
{
Utils.WriteLine("SD uninstaled successfully!", ConsoleColor.White);
}
else
{
Utils.WriteLine("Error uninstalling SD!");
}
}
else
{
Utils.WriteLine("SD not found for uninstall");
}
}
}
//delete SD folder
int backUp = 0;
while (Directory.Exists(installPath + "AppServerMobile"))
{
try
{
Directory.Delete(installPath + "AppServerMobile", true);
}
catch (Exception ex)
{
Utils.WriteLine("AppServerMobile uninstall exception : " + ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
installNR--;
threadLock = false;
Utils.WriteLine("AppServerMobile" + " uninstalled finish", ConsoleColor.White);
updateStatus("AppServerMobile" + " removal succesfull.", false);
DeleteShortcut("AppServer for Dispatch Mobile");
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus(AppNAME + " removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine(e.ToString());
updateStatus(AppNAME + " removal failed.", false);
}
}
/// <summary>
/// Uninstall the TCP Server including the service and the exe file.
/// Also it will be removed from the Add/Remove programs
/// </summary>
private void UnInstallTCPServer()
{
try
{
Utils.WriteLine("Uninstalling TCPServer", ConsoleColor.White);
updateStatus("Uninstall " + "TCP Server", true);
// close app if running
CloseApp(App.TCP_SERVER);
// create backup for current config
BackupApp("TCPServerService");
// uninstall app using MSI file sillently
UninstallMSIExec(App.TCP_SERVER);
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
StreamWriter sw = p.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine("sc stop TCPServerService");
//sw.WriteLine("sc delete TCPServerService");
}
sw.Close();
StreamReader reader = p.StandardOutput;
string output = reader.ReadToEnd();
Utils.WriteLine(output);
p.WaitForExit();
Thread.Sleep(3000);
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
allProducts = new ManagementObjectSearcher(allProductsQuery);
foreach (ManagementObject product in allProducts.Get())
{
PropertyDataCollection col = product.Properties;
bool found_name = false;
bool found_company = false;
//Console.WriteLine("Product: new");
foreach (PropertyData property in product.Properties)
{
if (property.Value != null)
{
//Console.WriteLine("Property: " + property.Value.ToString());
if (property.Value.ToString() == "TCPServerService")
{
found_name = true;
}
if (property.Value.ToString() == Program.COMPANY)
{
found_company = true;
}
}
if (found_name && found_company) break;
}
if (found_name && found_company)
{
ManagementObject product2 = new ManagementObject(product.Path.Path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
object result = product.InvokeMethod("Uninstall", null);
//Console.WriteLine("The Uninstall method result is {0}", result.ToString());
if (result.ToString() == "0")
{
Utils.WriteLine("TCPServer uninstaled successfully!", ConsoleColor.White);
}
else
{
Utils.WriteLine("Error uninstalling TCPServer!");
}
}
else
{
Utils.WriteLine("TCPServer not found for uninstall");
}
}
}
//delete SD folder
int backUp = 0;
while (Directory.Exists(installPath + "TCPServer"))
{
try
{
Directory.Delete(installPath + "TCPServer", true);
}
catch (Exception ex)
{
Utils.WriteLine("TCPServer uninstall exception: " + ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
installNR--;
threadLock = false;
Utils.WriteLine("TCPServer" + " uninstalled finish", ConsoleColor.White);
updateStatus("TCPServer" + " removal succesfull.", false);
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus(AppNAME + " removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine("TCPServer uninstall exception: " + e.ToString());
updateStatus(AppNAME + " removal failed.", false);
}
}
/// <summary>
/// Uninstall the TCP Client including the service and the exe file.
/// Also it will be removed from the Add/Remove programs
/// </summary>
private void UnInstallTCPClient()
{
try
{
Utils.WriteLine("Uninstalling TCPClient");
updateStatus("Uninstall " + "TCP Client", true);
// close app if running
CloseApp(App.TCP_CLIENT);
// create backup for current config
BackupApp("TCPClientService");
// uninstall app using MSI file sillently
UninstallMSIExec(App.TCP_CLIENT);
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
StreamWriter sw = p.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine("sc stop TCPClientService");
//sw.WriteLine("sc delete TCPClientService");
}
sw.Close();
StreamReader reader = p.StandardOutput;
string output = reader.ReadToEnd();
Console.WriteLine(output);
p.WaitForExit();
Thread.Sleep(3000);
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
allProducts = new ManagementObjectSearcher(allProductsQuery);
foreach (ManagementObject product in allProducts.Get())
{
PropertyDataCollection col = product.Properties;
bool found_name = false;
bool found_company = false;
foreach (PropertyData property in product.Properties)
{
if (property.Value != null)
{
if (property.Value.ToString() == "TCPClientService")
{
found_name = true;
}
if (property.Value.ToString() == Program.COMPANY)
{
found_company = true;
}
if (found_name && found_company) break;
}
}
if (found_name && found_company)
{
ManagementObject product2 = new ManagementObject(product.Path.Path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
object result = product.InvokeMethod("Uninstall", null);
//Console.WriteLine("The Uninstall method result is {0}", result.ToString());
if (result.ToString() == "0")
{
Utils.WriteLine("TCPClient uninstaled successfully!");
}
else
{
Utils.WriteLine("Error uninstalling SD!");
}
}
else
{
Utils.WriteLine("TCPClient not found for uninstall");
}
}
}
//delete SD folder
int backUp = 0;
while (Directory.Exists(installPath + "TCPClient"))
{
try
{
Directory.Delete(installPath + "TCPClient", true);
}
catch (Exception ex)
{
Utils.WriteLine("TCP Client uninstall exception: " + ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
installNR--;
threadLock = false;
Utils.WriteLine("TCPClient" + " uninstalled finish");
updateStatus("TCPClient" + " removal succesfull.", false);
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus(AppNAME + " removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine(e.ToString());
updateStatus(AppNAME + " removal failed.", false);
}
}
private String ftdi_driver;
/// <summary>
/// Uninstall the Gateway from the hard-disk
/// Also it will be removed from the Add/Remove programs
/// </summary>
private void UnInstallGW()
{
try
{
Utils.WriteLine("UnInstalling GW", ConsoleColor.White);
//delete GW folder
updateStatus("Uninstalling " + GatewayNAME + " gateway", true);
String Direct = "";
if (radioType == RADIOTYPE.MOTO)
{
if (dropGatewayList.SelectedIndex == 0)
{
Direct = installPath + "Gateway";
// close app if running
CloseApp(App.GW_TRBO);
// create backup for current config
BackupApp("Gateway");
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_TRBO);
}
else if (dropGatewayList.SelectedIndex == 1)
{
Direct = installPath + "Tetra";
// close app if running
CloseApp(App.GW_TETRA);
// create backup for current config
BackupApp("Tetra");
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_TETRA);
}
else if (dropGatewayList.SelectedIndex == 2)
{
Direct = installPath + "CPlus";
// close app if running
CloseApp(App.GW_CPLUS);
// create backup for current config
BackupApp("CPlus");
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_CPLUS);
}
else if (dropGatewayList.SelectedIndex == 3)
{
Direct = installPath + "Tetra_SDR";
// close app if running
CloseApp(App.GW_TETRA_SDR);
// create backup for current config
BackupApp("Tetra_SDR");
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_TETRA_SDR);
}
else if (dropGatewayList.SelectedIndex == 4)
{
updateStatus("Uninstalling " + GatewayNAME, true);
Direct = installPath + "Repeater_Gateway";
// close app if running
CloseApp(App.GW_REPEATER);
// create backup for current config
BackupApp("Repeater_Gateway");
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_REPEATER);
}
else if (dropGatewayList.SelectedIndex == 5)
{
Direct = installPath + "SMC_Gateway";
// close app if running
CloseApp(App.GW_SMC);
// create backup for current config
BackupApp("SMC_Gateway");
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_SMC);
}
}
else if (radioType == RADIOTYPE.LISF)
{
if (dropGatewayList.SelectedIndex == 0)
{
Direct = installPath + DirName_Sepura3T_SDR;
// close app if running
CloseApp(App.GW_SEPURA_3T_SDR);
// create backup for current config
BackupApp(DirName_Sepura3T_SDR);
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_SEPURA_3T_SDR);
}
else if (dropGatewayList.SelectedIndex == 1)
{
Direct = installPath + DirName_Tetra_SDR;
// close app if running
CloseApp(App.GW_TETRA_SDR);
// create backup for current config
BackupApp(DirName_Tetra_SDR);
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_TETRA_SDR);
}
}
else if (radioType == RADIOTYPE.LINX)
{
Direct = installPath + "Gateway";
// close app if running
CloseApp(App.LINX_GATEWAY);
// create backup for current config
BackupApp("Gateway");
// uninstall app using MSI file sillently
UninstallMSIExec(App.LINX_GATEWAY);
}
else if (radioType == RADIOTYPE.EXCERA)
{
Direct = installPath + "Gateway";
// close app if running
CloseApp(App.EXCERA_GATEWAY);
// create backup for current config
BackupApp("Gateway");
// uninstall app using MSI file sillently
UninstallMSIExec(App.EXCERA_GATEWAY);
}
if (radioType == RADIOTYPE.LINXB)
{
if (dropGatewayList.SelectedIndex == 0)
{
Direct = installPath + "LINX_gateway";
// close app if running
CloseApp(App.LINX_GATEWAY);
// create backup for current config
BackupApp("LINX_gateway");
// uninstall app using MSI file sillently
UninstallMSIExec(App.LINX_GATEWAY);
}
else if (dropGatewayList.SelectedIndex == 1)
{
Direct = installPath + "Mototrbo_gateway";
// close app if running
CloseApp(App.GW_TRBO);
// create backup for current config
BackupApp("Mototrbo_gateway");
// uninstall app using MSI file sillently
UninstallMSIExec(App.GW_TRBO);
}
}
else Direct = installPath + "Gateway";
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
ManagementObjectSearcher allProducts = new ManagementObjectSearcher(allProductsQuery);
foreach (ManagementObject product in allProducts.Get())
{
PropertyDataCollection col = product.Properties;
bool found_name = false;
bool found_company = false;
foreach (PropertyData property in product.Properties)
{
if (property.Value != null)
{
//Console.WriteLine("Propert:X" + property.Value.ToString() + "Xcompareto:X" + uInstall_Gateway+"X");
if ((property.Value.ToString() == uInstall_Gateway))
{
found_name = true;
}
if (property.Value.ToString() == Program.COMPANY)
{
found_company = true;
}
if (found_name && found_company) break;
}
}
if (found_name && found_company)
{
ManagementObject product2 = new ManagementObject(product.Path.Path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
object result = product.InvokeMethod("Uninstall", null);
//Console.WriteLine("The Uninstall method result is {0}", result.ToString());
if (result.ToString() == "0")
{
Utils.WriteLine("GW uninstaled successfully!", ConsoleColor.White);
}
else
{
Utils.WriteLine("Error uninstalling GW");
}
}
else
{
Utils.WriteLine("GW not found for uninstall");
}
}
}
int backUp = 0;
while (Directory.Exists(Direct))
{
try
{
Directory.Delete(Direct, true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
if ((radioType == RADIOTYPE.MOTO) && (dropGatewayList.SelectedIndex == 4))
{
ftdi_driver = installPath + "ftdi_driver";
backUp = 0;
while (Directory.Exists(ftdi_driver))
{
try
{
Directory.Delete(ftdi_driver, true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
}
installNR--;
threadLock = false;
Utils.WriteLine("Gateway uninstalled", ConsoleColor.White);
if ((radioType == RADIOTYPE.MOTO) && (dropGatewayList.SelectedIndex == 4)) DeleteShortcut(GatewayNAME);
DeleteShortcut(GatewayNAME+" Gateway");
updateStatus("Gateway removal succesfull.", false);
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus("Gateway removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine(e.ToString());
updateStatus("Gateway removal failed.", false);
}
}
/// <summary>
/// Uninstall Administrative Module from the hard-disk
/// Also it will be removed from the Add/Remove programs
/// </summary>
private void UnInstallSUM()
{
try
{
Utils.WriteLine("Uninstalling AdministrativeModule", ConsoleColor.White);
updateStatus("Uninstalling AdministrativeModule", true);
// close app if running
CloseApp(App.ADMIN_MODULE);
// create backup for current config
BackupApp("AdministrativeModule");
// uninstall app using MSI file sillently
UninstallMSIExec(App.ADMIN_MODULE);
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
ManagementObjectSearcher allProducts = new ManagementObjectSearcher(allProductsQuery);
foreach (ManagementObject product in allProducts.Get())
{
PropertyDataCollection col = product.Properties;
bool found_name = false;
bool found_company = false;
foreach (PropertyData property in product.Properties)
{
if (property.Value != null)
{
if (property.Value.ToString() == uInstall_SUM)
{
found_name = true;
}
if (property.Value.ToString() == Program.COMPANY)
{
found_company = true;
}
}
if (found_name && found_company) break;
}
if (found_name && found_company)
{
ManagementObject product2 = new ManagementObject(product.Path.Path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
object result = product.InvokeMethod("Uninstall", null);
//Console.WriteLine("The Uninstall method result is {0}", result.ToString());
if (result.ToString() == "0")
{
Utils.WriteLine("AdministrativeModule uninstaled successfully!");
}
else
{
Utils.WriteLine("Error uninstalling AdministrativeModule");
}
}
else
{
Utils.WriteLine("AdministrativeModule not found for uninstall");
}
}
}
//delete SUM folder
int backUp = 0;
while (Directory.Exists(installPath + "AdministrativeModule"))
{
try
{
Directory.Delete(installPath + "AdministrativeModule", true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
installNR--;
threadLock = false;
Utils.WriteLine("AdministrativeModule uninstalled", ConsoleColor.White);
DeleteShortcut("AdministrativeModule");
updateStatus("Administrative Module removal succesfull.", false);
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus("Administartive Module removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine(e.ToString());
updateStatus("Administartive Module removal failed.", false);
}
}
/// <summary>
/// Uninstall Application Server from the hard-disk
/// Also it will be removed from the Add/Remove programs
/// </summary>
private void UnInstallAPP()
{
try
{
updateStatus("Uninstalling Application server", true);
Utils.WriteLine("Uninstalling Application Server", ConsoleColor.White);
// close app if running
CloseApp(App.APP_SERVER);
// create backup for current config
BackupApp("AppServer");
// uninstall app using MSI file sillently
UninstallMSIExec(App.APP_SERVER);
DeleteAppKey(App.GetAppName(App.APP_SERVER));
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
ManagementObjectSearcher allProducts = new ManagementObjectSearcher(allProductsQuery);
foreach (ManagementObject product in allProducts.Get())
{
PropertyDataCollection col = product.Properties;
bool found_name = false;
bool found_company = false;
foreach (PropertyData property in product.Properties)
{
if (property.Value != null)
{
if (property.Value.ToString() == uInstall_APP)
{
found_name = true;
}
if (property.Value.ToString() == Program.COMPANY)
{
found_company = true;
}
}
if (found_name && found_company) break;
}
if (found_name && found_company)
{
ManagementObject product2 = new ManagementObject(product.Path.Path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
object result = product.InvokeMethod("Uninstall", null);
//Console.WriteLine("The Uninstall method result is {0}", result.ToString());
if (result.ToString() == "0")
{
Console.WriteLine("Application server uninstaled successfully!");
}
else
{
Console.WriteLine("Error uninstalling Application server");
}
}
else
{
Console.WriteLine("Application server not found for uninstall");
}
}
}
//delete APP folder
int backUp = 0;
while (Directory.Exists(installPath + "AppServer"))
{
try
{
Directory.Delete(installPath + "AppServer", true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
installNR--;
threadLock = false;
DeleteShortcut("AppServer");
// copy remote support file to the installed path
if (Program.COMPANY.Equals("SafeMobile") && IO.File.Exists(installPath + "\\" + "SafeMobileRemoteSupport.exe"))
{
// delete shortcut
DeleteShortcut("SafeMobile Remote Support");
IO.File.Delete(installPath + "\\" + "SafeMobileRemoteSupport.exe");
}
else if (IO.File.Exists(installPath + "\\" + Program.COMPANY + "RemoteSupport.exe"))
{
// delete shortcut
DeleteShortcut(Program.COMPANY + "RemoteSupport");
IO.File.Delete(installPath + "\\" + Program.COMPANY + "RemoteSupport.exe");
}
Utils.WriteLine("Aplication AppServer uninstalled", ConsoleColor.White);
updateStatus("Application Server removal succesfull.", false);
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus("Application Server removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine(e.ToString());
updateStatus("Application Server removal failed.", false);
}
}
/// <summary>
/// Uninstall Updater from the hard-disk
/// Also it will be removed from the Add/Remove programs
/// </summary>
private void UnInstallUpd()
{
try
{
updateStatus("Uninstalling updater", true);
Utils.WriteLine("Uninstalling Updater", ConsoleColor.White);
// close app if running
CloseApp(App.UPDATER);
// create backup for current config
BackupApp("Updater");
// uninstall app using MSI file sillently
UninstallMSIExec(App.UPDATER);
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
ManagementObjectSearcher allProducts = new ManagementObjectSearcher(allProductsQuery);
foreach (ManagementObject product in allProducts.Get())
{
PropertyDataCollection col = product.Properties;
bool found_name = false;
bool found_company = false;
foreach (PropertyData property in product.Properties)
{
if (property.Value != null)
{
if (property.Value.ToString() == uInstall_Upd)
{
found_name = true;
}
if (property.Value.ToString() == Program.COMPANY)
{
found_company = true;
}
}
if (found_name && found_company) break;
}
if (found_name && found_company)
{
ManagementObject product2 = new ManagementObject(product.Path.Path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
object result = product.InvokeMethod("Uninstall", null);
//Console.WriteLine("The Uninstall method result is {0}", result.ToString());
if (result.ToString() == "0")
{
Console.WriteLine("updater uninstaled successfully!");
}
else
{
Console.WriteLine("Error uninstalling updater");
}
}
else
{
Console.WriteLine("updater not found for uninstall");
}
}
}
//delete UPD folder
int backUp = 0;
while (Directory.Exists(installPath + "Updater"))
{
try
{
Directory.Delete(installPath + "Updater", true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
installNR--;
threadLock = false;
Utils.WriteLine("Updater uninstalled", ConsoleColor.White);
DeleteShortcut("SoftwareUpdate");
DeleteShortcut(Program.COMPANY + " Remote Support");
updateStatus("Updater removal succesfull.", false);
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus("Updater removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine(e.ToString());
updateStatus("Updater removal failed.", false);
}
}
/// <summary>
/// Uninstall Database fom the hard-disk and stops the service
/// </summary>
private void UnInstallDB()
{
try
{
updateStatus("Uninstalling Database", true);
Utils.WriteLine("UnInstalling DataBase");
// create backup for current config
BackupApp("postgresql");
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
StreamWriter sw = p.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine("sc stop PostgreSD");
//sw.WriteLine("net start PostgreSD");
sw.WriteLine("sc delete PostgreSD");
}
sw.Close();
StreamReader reader = p.StandardOutput;
string output = reader.ReadToEnd();
Console.WriteLine(output);
p.WaitForExit();
Utils.WriteLine("DB uninstall done!!! -- Removing DB files", ConsoleColor.White);
Thread.Sleep(3000);
//delete DB folder
//wait for process to stop
int backUp = 0;
bool loop = true;
while (loop)
{
Process[] processlist = Process.GetProcesses();
bool found = false;
foreach (Process theprocess in processlist)
{
if (theprocess.ProcessName == "postgres")
{
found = true;
Utils.WriteLine($"postgres.exe still in process list waiting to close (try:{backUp})");
}
}
Thread.Sleep(600);
if (found) loop = true;
else loop = false;
backUp++;
if (backUp > 10) break;
}
backUp = 0;
while (Directory.Exists(installPath + "postgresql"))
{
try
{
Directory.Delete(installPath + "postgresql", true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
backUp++;
if (backUp > 20) break;
Thread.Sleep(1000);
}
//signal thread complet
//deleting tools
DirectoryInfo dr = new DirectoryInfo(installPath + "Tools");
if (dr.Exists)
dr.Delete(true);
installNR--;
threadLock = false;
Utils.WriteLine("Database uninstalled", ConsoleColor.White);
updateStatus("Database removal succesfull.", false);
}
catch (ManagementException me)
{
installNR--;
threadLock = false;
Utils.WriteLine(me.Message);
Utils.WriteLine(me.ToString());
updateStatus("Database removal failed.", false);
}
catch (Exception e)
{
installNR--;
threadLock = false;
Utils.WriteLine(e.ToString());
updateStatus("Database removal failed.", false);
}
}
#endregion
#region Control Panel Add/Remove procedure
/// <summary>
/// Remove the desire appplication by running the msiexec command from a
/// Command-Prompt console sillently.
/// </summary>
/// <param name="product">Application product code that will be removed</param>
private void UninstallMSIExec(App product)
{
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
StreamWriter sw = p.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine(kitPath.Substring(0, 2));
sw.WriteLine("cd " + '"' + kitPath + AppNAME + '"');
String installedLocation = GetRegValue("InstalledLocation", App.GetAppName(product));
String productCode = GetRegValue("ProductCode", App.GetAppName(product));
// sw.WriteLine("MsiExec.exe /I" + productCodes[APP_ADD_REMOVE.UPDATER.ToString()] + " REINSTALL=ALL REINSTALLMODE=omus /l*v log.txt");
sw.WriteLine("MsiExec.exe /x" + productCode + " REBOOT=R /quiet");
//sw.WriteLine("msiexec /qn /i " + fileMSI + " TARGETDIR=" + '"' + installPath + AppNAME + '"');
}
sw.Close();
p.WaitForExit();
StreamReader reader = p.StandardOutput;
string output = reader.ReadToEnd();
Utils.WriteLine("UNINSTALL UPDATER OUTPUT RESULT " + output, ConsoleColor.Magenta);
}
#endregion
#region APP Close
private void CloseApp(App product)
{
String installedLocation = GetRegValue("InstalledLocation", App.GetAppName(product));
var wmiQueryString = "SELECT ProcessId, ExecutablePath, CommandLine FROM Win32_Process";
using (var searcher = new ManagementObjectSearcher(wmiQueryString))
using (var results = searcher.Get())
{
var query = from p in Process.GetProcesses()
join mo in results.Cast<ManagementObject>()
on p.Id equals (int)(uint)mo["ProcessId"]
select new
{
Process = p,
Path = (string)mo["ExecutablePath"],
CommandLine = (string)mo["CommandLine"],
};
foreach (var item in query)
{
if (item.Path!= null && item.Path.StartsWith(installedLocation))
{
// Do what you want with the Process, Path, and CommandLine
Utils.WriteLine("APPLICATION " + App.GetAppName(product) + " IS RUNNING !!!! ", ConsoleColor.Yellow);
item.Process.Kill();
}
}
}
//Console.ReadKey();
}
#endregion
#region App Backup
string backupFolder = "";
private void BackupApp(String folderName)
{
//Utils.WriteLine("Backing up the application : " + folderName);
String path = tbInstallPath.Text + "\\";
//if no app selected return
if (!cbDBinstall.Checked && !cbGWinstall.Checked
&& !cbSDinstall.Checked && !cbSUMinstall.Checked && !AdvanceSettings)
{
RadMessageBox.Show("Please select an application for uninstalling");
radWaitingBar1.Visible = false;
lbStatus.Text = "Please select an application for uninstalling!!";
btnUnInstall.Enabled = true;
return;
}
if (8 == IntPtr.Size
|| (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
{
if (path.Contains("Program Files") && !installPath.Contains("Program Files (x86)"))
path = installPath.Replace("Program Files", "Program Files (x86)");
}
else
SystemType32 = true;
if (backupFolder.Length < 1)
backupFolder = path + "Backup_" + DateTime.Now.ToString("dd_MM_HH_mm");
Utils.WriteLine($"Backing up the application: {folderName} to path: {backupFolder}");
try
{
if (Directory.Exists(backupFolder))
{
// if folder exists => clean the folder
DirectoryInfo dInfo = new DirectoryInfo(backupFolder);
foreach (var file in dInfo.GetFiles("*.*"))
IO.File.Delete(file.FullName);
}
else
{
// if folder exists => create it
Directory.CreateDirectory(backupFolder);
}
DirectoryInfo d = new DirectoryInfo(path + folderName);
foreach (var file in d.GetFiles("*.ini"))
{
Directory.Move(file.FullName, backupFolder + "\\" + folderName + "_" + file.Name );
}
foreach (var file in d.GetFiles("*.config"))
{
Directory.Move(file.FullName, backupFolder + "\\" + folderName + "_" + file.Name);
}
if(folderName.Contains("AppServer"))
{
try
{
if (Directory.Exists(path + folderName) && Directory.Exists(path + folderName + "\\recordings"))
Directory.Move(path + folderName + "\\recordings", backupFolder + "\\recordings");
}
catch (Exception ex) { Utils.WriteLine("EXCEPTION " + ex.ToString(), ConsoleColor.Yellow); }
try {
if (Directory.Exists(path + folderName) && Directory.Exists(path + folderName + "\\backups"))
Directory.Move(path + folderName + "\\backups", backupFolder + "\\backups");
}
catch (Exception ex) { Utils.WriteLine("EXCEPTION " + ex.ToString(), ConsoleColor.Yellow); }
}
}
catch(Exception ex)
{
Utils.WriteLine("DDDDDD " + ex.ToString());
}
}
#endregion
private static void DeleteFileSystemInfo(FileSystemInfo fsi)
{
fsi.Attributes = FileAttributes.Normal;
var di = fsi as DirectoryInfo;
if (di != null)
{
foreach (var dirInfo in di.GetFileSystemInfos())
DeleteFileSystemInfo(dirInfo);
}
fsi.Delete();
}
#endregion
private bool CheckIPV6()
{
Process p = new Process();
p = new Process();
p.StartInfo.FileName = "cmd.exe";
String arguments = "/c route print";
p.StartInfo.Arguments = arguments;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
String output = p.StandardOutput.ReadToEnd();
return output.Contains("IPv6 Route Table");
}
private void MainForm_Load(object sender, EventArgs e)
{
var pathReg = GetRegValue("Path", Program.COMPANY);
Utils.WriteLine("GetRegValue " + pathReg, ConsoleColor.Cyan);
if (pathReg != null && pathReg.Length > 1)
tbInstallPath.Text = (string)pathReg;
txDefPortSUM.Enabled = true;
txDefPortSD.Enabled = true;
txDefPortGW.Enabled = true;
txDefPort.Enabled = true;
if(radioType == RADIOTYPE.LISF)
{
dropGatewayList.SelectedIndex = 0;
}
else if (radioType != RADIOTYPE.SIMOCO && radioType != RADIOTYPE.LINX && radioType != RADIOTYPE.LINXB && radioType != RADIOTYPE.MOTO && radioType != RADIOTYPE.HYT)
{
txDefPortGW.Visible = radLabel8.Visible = true;
radLabel3.Text = "Database IP";
}
}
//test install
#region test install/uninstall
private void TestInstall()
{
int iSD=2, iGW=2, iSUm=2, iapp=2, iUpd=2, idb=2,iappMobile=2,iServer=2,iClient=2;
if (cbSDinstall.Checked)
{
if (install_hash.ContainsKey(AppNAME))
{
bool sd = TestAPPlication(AppNAME, EXE_Dispatcher);
iSD = (sd) ? 1 : 0;
}
}
if (cbGWinstall.Checked)
{
if (install_hash.ContainsKey("Gateway"))
{
bool gw = false;
if (radioType == RADIOTYPE.MOTO)
{
string sourceFolder = getSourceFolderBasedOnSelectedGateway();
if (!string.IsNullOrEmpty(sourceFolder))
gw = TestAPPlication(sourceFolder, EXE_Gateway);
else
Utils.WriteLine("Invalid sourcePath", ConsoleColor.Red);
}
else if (radioType == RADIOTYPE.LISF)
{
if (dropGatewayList.SelectedIndex == 0) gw = TestAPPlication(DirName_Sepura3T_SDR, EXE_Gateway);
else if (dropGatewayList.SelectedIndex == 1) gw = TestAPPlication(DirName_Tetra_SDR, EXE_Gateway);
}
else if (radioType == RADIOTYPE.LINXB)
{
if (dropGatewayList.SelectedIndex == 0) gw = TestAPPlication("LINX_gateway", EXE_Gateway);
else if (dropGatewayList.SelectedIndex == 1) gw = TestAPPlication("Mototrbo_gateway", EXE_Gateway);
}
else gw = TestAPPlication("Gateway", EXE_Gateway);
iGW = (gw) ? 1 : 0;
}
}
if (cbSUMinstall.Checked)
{
if (install_hash.ContainsKey("AdministrativeModule"))
{
bool sum = TestAPPlication("AdministrativeModule", EXE_SUM);
iSUm = (sum) ? 1 : 0;
}
}
if (cbDBinstall.Checked)
{
if (install_hash.ContainsKey("AppServer"))
{
bool app = TestAPPlication("AppServer", EXE_APP);
iapp = (app) ? 1 : 0;
}
if (install_hash.ContainsKey("postgresql"))
{
bool db = TestPostgresDB();
idb = (db) ? 1 : 0;
}
}
if (install_hash.ContainsKey("Updater"))
{
//updater is always installing with an application
bool upd = TestAPPlication("Updater", EXE_Upd);
iUpd = (upd) ? 1 : 0;
}
if (cbInstallSDMobile.Checked)
{
if (install_hash.ContainsKey("AppServerMobile"))
{
bool appMobile = TestAPPlication("AppServerMobile", EXE_APPMobile);
iappMobile = (appMobile) ? 1 : 0;
}
}
if (AdvanceSettings)
{
if (rbTCPServer.IsChecked)
{
if (install_hash.ContainsKey("TCPServer"))
{
bool Server = TestAPPlication("TCPServer", EXE_Server);
iServer = (Server) ? 1 : 0;
}
}
else if (rbTCPClient.IsChecked)
{
if (install_hash.ContainsKey("TCPClient"))
{
bool Client = TestAPPlication("TCPClient", EXE_Client);
iClient = (Client) ? 1 : 0;
}
}
}
StatusForm sForm = null;
sForm = new StatusForm(true, iSD, iGW, iSUm, iUpd, iapp, idb,iappMobile,iServer,iClient);
sForm.ShowDialog();
}
private bool TestAPPlication(string name, string exe)
{
bool ret = false;
FileInfo fi = new FileInfo(installPath + name + "\\" + exe);
if (fi.Exists)
{
ret = true;
Console.WriteLine("File " + installPath + name + "\\" + exe + " found.");
}
else
{
Console.WriteLine("File " + installPath + name + "\\" + exe + " missing retry.");
}
return ret;
}
private bool TestPostgresDB()
{
bool valueToReturn = false;
int nbOfTries = 13;
bool tryAgain = false;
while (nbOfTries > 0)
{
if (tryAgain)
{
Utils.WriteLine("Wait 5 seconds ....", ConsoleColor.Green);
Thread.Sleep(5000); //
}
try
{
valueToReturn = TestDB();
break;
}
catch (Exception ex)
{
if (ex.ToString().Contains("the database system is starting up"))
{
Utils.WriteLine("The database system is starting up...", ConsoleColor.Green);
nbOfTries--;
tryAgain = true;
}
else
{
// error - i will stop
Utils.WriteLine("Error on open DB" + ex.ToString(), ConsoleColor.Red);
break;
}
}
}
return valueToReturn;
}
private bool TestDB()
{
bool ret = false;
DBuserManager db4users = null;
db4users= new DBuserManager("localhost", "safedispatchdb", "postgres", "wizdemo26", txDefPort.Text);
db4users.getAllUsers();
ret = true;
Console.WriteLine("TEST DB done");
// udpate DB
DBupdateManager db4update = null;
db4update= new DBupdateManager("localhost", "safedispatchdb", "postgres", "wizdemo26", txDefPort.Text);
Version v = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
db4update.Insert_New_DBUpdate(v.ToString());
db4update.Update_database_for_SD6();
if (install_Repeater_GW)
{
//delete old
DBgatewaysManager db4gateway = null;
db4gateway = new DBgatewaysManager("localhost", "safedispatchdb", "postgres", "wizdemo26", txDefPort.Text);
db4gateway.deleteGateway(1);
//add repeater gateway
db4gateway.add_a_default_Repeater_In_database();
}
return ret;
}
private void TestUninstall()
{
int iSD = 2, iGW = 2, iSUm = 2, iapp = 2, iUpd = 2, idb = 2, iappMobile = 2, iserver =2, iclient =2;
if (cbSDinstall.Checked)
{
if (uninstall_hash.ContainsKey(AppNAME))
{
bool sd = TestUninstall4App(AppNAME);
iSD = (sd) ? 1 : 0;
}
}
if (cbGWinstall.Checked)
{
if (uninstall_hash.ContainsKey("Gateway"))
{
bool gw = TestUninstall4App("Gateway");
iGW = (gw) ? 1 : 0;
}
}
if (cbSUMinstall.Checked)
{
if (uninstall_hash.ContainsKey("AdministrativeModule"))
{
bool sum = TestUninstall4App("AdministrativeModule");
iSUm = (sum) ? 1 : 0;
}
}
if (cbDBinstall.Checked)
{
if (uninstall_hash.ContainsKey("AppServer"))
{
bool app = TestUninstall4App("AppServer");
iapp = (app) ? 1 : 0;
}
if (uninstall_hash.ContainsKey("postgresql"))
{
bool db = TestUninstall4App("postgresql");
idb = (db) ? 1 : 0;
}
}
if (uninstall_hash.ContainsKey("Updater"))
{
bool upd = TestUninstall4App("Updater");
iUpd = (upd) ? 1 : 0;
}
if (cbInstallSDMobile.Checked)
{
if (uninstall_hash.ContainsKey("AppServerMobile"))
{
bool appMobile = TestUninstall4App("AppServerMobile");
iappMobile = (appMobile) ? 1 : 0;
}
}
if (AdvanceSettings)
{
if (rbTCPServer.IsChecked)
{
if (uninstall_hash.ContainsKey("TCPServer"))
{
bool Server = TestUninstall4App("TCPServer");
iserver = (Server) ? 1 : 0;
}
}
else if (rbTCPClient.IsChecked)
{
if (uninstall_hash.ContainsKey("TCPClient"))
{
bool Client = TestUninstall4App("TCPClient");
iclient = (Client) ? 1 : 0;
}
}
}
StatusForm sForm = null;
sForm = new StatusForm(false, iSD, iGW, iSUm, iUpd, iapp, idb,iappMobile,iserver,iclient);
sForm.ShowDialog();
}
private bool TestUninstall4App(string name)
{
bool ret = true;
DirectoryInfo fi = new DirectoryInfo(installPath + name + "\\" );
if (fi.Exists)
{
ret = false;
Console.WriteLine("Found->File " + installPath + name + "\\");
}
else
{
Console.WriteLine("Missing->File " + installPath + name + "\\");
}
return ret;
}
private bool Search4App(string name)
{
String instalationPath = installPath.Replace(@"\\", @"\");
Utils.WriteLine($"Searching for installed app {name} in {(instalationPath + name)}\\", ConsoleColor.DarkYellow);
bool ret = false;
DirectoryInfo fi = new DirectoryInfo(instalationPath.Replace(@"\\", @"\") + name + "\\");
if (fi.Exists)
{
ret = true;
Console.WriteLine("Found->File " + instalationPath + name + "\\");
}
else
{
Console.WriteLine("Missing->File " + instalationPath + name + "\\");
}
return ret;
}
private bool IsAppInstalled(App app)
{
String installedLocation = GetRegValue("InstalledLocation", App.GetAppName(app));
if (String.IsNullOrEmpty(installedLocation))
{
Utils.WriteLine($"{app} is not already installed");
return false;
}
Utils.WriteLine($"{app} IsAppInstalled to " + installedLocation, ConsoleColor.Yellow);
if (installedLocation.Length < 2)
return false;
// check if the folder exists
bool ret = false;
DirectoryInfo fi = new DirectoryInfo(installedLocation + "\\");
if (fi.Exists)
{
ret = true;
Utils.WriteLine("Found->File " + installedLocation + "\\", ConsoleColor.White);
// check if an exe file exists there
if (Directory.GetFiles(installedLocation, "*.exe").Length == 0)
{
//NO matching *.exe files
ret = false;
}
else
{
//has matching *.exe files
ret = true;
}
}
else
{
Utils.WriteLine("Missing->File " + installedLocation + "\\", ConsoleColor.White);
}
// check if product code is installed
// TODO
return ret;
}
#endregion
private void dropGatewayList_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
{
if (radioType == RADIOTYPE.MOTO)
{
switch (dropGatewayList.SelectedIndex)
{
case 0:
EXE_Gateway = "MotoTRBO_GW.exe";
GatewayNAME = "MotoTRBO";
uInstall_Gateway = "Gateway";
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
break;
case 1:
EXE_Gateway = "Tetra_GW.exe";
GatewayNAME = "Tetra";
uInstall_Gateway = "TetraGW";
txDefPortGW.Visible = radLabel8.Visible = true;
radLabel3.Text = "Database IP";
break;
case 2:
EXE_Gateway = "CPlus_GW.exe";
GatewayNAME = "Connect Plus";
uInstall_Gateway = "CPlusGW";
txDefPortGW.Visible = radLabel8.Visible = true;
radLabel3.Text = "Database IP";
break;
case 3:
EXE_Gateway = "SDRgateway.exe";
GatewayNAME = "Tetra_SDR";
uInstall_Gateway = "SDRgateway";
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
break;
case 4:
EXE_Gateway = "MotoRepeater.exe";
GatewayNAME = "Repeater_Gateway";
uInstall_Gateway = "Repeater_Gateway";
txDefPortGW.Visible = radLabel8.Visible = true;
radLabel3.Text = "Database IP";
break;
case 5:
EXE_Gateway = "GatewaySMC.exe";
GatewayNAME = "SMC_Gateway";
uInstall_Gateway = "SMC_Gateway";
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
break;
}
}
else if (radioType == RADIOTYPE.LISF)
{
switch (dropGatewayList.SelectedIndex)
{
case 0:
EXE_Gateway = "Sepura3T_SDR.exe";
GatewayNAME = "Sepura3T_SDR";
uInstall_Gateway = "Sepura3T_SDR";
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
break;
case 1:
EXE_Gateway = "SDRgateway.exe";
GatewayNAME = "Tetra_SDR";
uInstall_Gateway = "SDRgateway";
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
break;
}
}
else if (radioType == RADIOTYPE.LINXB)
{
switch (dropGatewayList.SelectedIndex)
{
case 0:
EXE_Gateway = "LinxGateway.exe";
GatewayNAME = "Linx";
uInstall_Gateway = "LinxGateway";
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
break;
case 1:
EXE_Gateway = "MotoTRBO_GW.exe";
GatewayNAME = "MotoTRBO";
uInstall_Gateway = "Gateway";
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
break;
}
}
else if (radioType == RADIOTYPE.SIMOCO || radioType == RADIOTYPE.LINX || radioType == RADIOTYPE.LINXB)
{
txDefPortGW.Visible = radLabel8.Visible = false;
radLabel3.Text = "Server IP";
}
}
private void linkAdvance_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
AdvanceSettings = true;
linkAdvance.Visible = false;
rbTCPClient.Visible = true;
rbTCPServer.Visible = true;
rbNoService.Visible = true;
lbServerIP.Visible = true;
lbPort.Visible = true;
txTCPIP.Visible = true;
txTCPPort.Visible = true;
switch (radioType)
{
case RADIOTYPE.MOTO:
case RADIOTYPE.LINX:
case RADIOTYPE.LINXB:
case RADIOTYPE.LISF:
/*
gbDispatch.Location = new Point(gbDispatch.Location.X, gbDispatch.Location.Y - 12);
gbGateway.Location = new Point(gbGateway.Location.X, gbGateway.Location.Y - 18);
gbAdmin.Location = new Point(gbAdmin.Location.X, gbAdmin.Location.Y - 20);
gbDatabase.Location = new Point(gbDatabase.Location.X, gbDatabase.Location.Y - 25);*/
rbTCPServer.Location = new Point(rbTCPServer.Location.X + 60, rbTCPServer.Location.Y-10);
rbTCPClient.Location = new Point(rbTCPServer.Location.X + 100, rbTCPServer.Location.Y);
rbNoService.Location = new Point(rbTCPServer.Location.X - 100, rbTCPServer.Location.Y);
lbServerIP.Location = new Point(lbServerIP.Location.X - 10, lbServerIP.Location.Y );
txTCPIP.Location = new Point(lbServerIP.Location.X + 50, lbServerIP.Location.Y);
lbPort.Location = new Point(lbServerIP.Location.X + 125, lbServerIP.Location.Y);
txTCPPort.Location = new Point(680, lbServerIP.Location.Y);
cbInstallSDMobile.Visible = true;
cbInstallSDMobile.Location = new Point(cbInstallSDMobile.Location.X, cbInstallSDMobile.Location.Y + 7);
break;
case RADIOTYPE.EXCERA:
/*
gbDispatch.Location = new Point(gbDispatch.Location.X, gbDispatch.Location.Y - 12);
gbGateway.Location = new Point(gbGateway.Location.X, gbGateway.Location.Y - 18);
gbAdmin.Location = new Point(gbAdmin.Location.X, gbAdmin.Location.Y - 20);
gbDatabase.Location = new Point(gbDatabase.Location.X, gbDatabase.Location.Y - 25);*/
rbTCPServer.Location = new Point(rbTCPServer.Location.X + 60, rbTCPServer.Location.Y);
rbTCPClient.Location = new Point(rbTCPServer.Location.X + 100, rbTCPServer.Location.Y);
rbNoService.Location = new Point(rbTCPServer.Location.X - 100, rbTCPServer.Location.Y);
lbServerIP.Location = new Point(lbServerIP.Location.X - 10, lbServerIP.Location.Y+10);
txTCPIP.Location = new Point(lbServerIP.Location.X + 60, lbServerIP.Location.Y);
lbPort.Location = new Point(lbServerIP.Location.X + 125, lbServerIP.Location.Y);
txTCPPort.Location = new Point(680, lbServerIP.Location.Y);
cbInstallSDMobile.Visible = true;
cbInstallSDMobile.Location = new Point(cbInstallSDMobile.Location.X, cbInstallSDMobile.Location.Y + 7);
break;
case RADIOTYPE.HYT:
gbDispatch.Location = new Point(gbDispatch.Location.X, gbDispatch.Location.Y - 12);
gbGateway.Location = new Point(gbGateway.Location.X, gbGateway.Location.Y - 18);
gbAdmin.Location = new Point(gbAdmin.Location.X, gbAdmin.Location.Y - 20);
gbDatabase.Location = new Point(gbDatabase.Location.X, gbDatabase.Location.Y - 25);
rbTCPServer.Location = new Point(rbTCPServer.Location.X +10, rbTCPServer.Location.Y - 15);
rbTCPClient.Location = new Point(rbTCPServer.Location.X + 100, rbTCPServer.Location.Y);
rbNoService.Location = new Point(rbTCPServer.Location.X - 100, rbTCPServer.Location.Y);
lbServerIP.Location = new Point(lbServerIP.Location.X - 60, lbServerIP.Location.Y - 5);
txTCPIP.Location = new Point(lbServerIP.Location.X + 50, lbServerIP.Location.Y);
lbPort.Location = new Point(lbServerIP.Location.X + 125, lbServerIP.Location.Y);
txTCPPort.Location = new Point(630, lbServerIP.Location.Y);
cbInstallSDMobile.Visible = true;
cbInstallSDMobile.Location = new Point(cbInstallSDMobile.Location.X - 50, cbInstallSDMobile.Location.Y-10);
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 50);
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 30);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 30);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 30);
break;
case RADIOTYPE.HARRIS:
gbDispatch.Location = new Point(gbDispatch.Location.X, gbDispatch.Location.Y);
gbGateway.Location = new Point(gbGateway.Location.X, gbGateway.Location.Y - 11);//2
gbAdmin.Location = new Point(gbAdmin.Location.X, gbAdmin.Location.Y - 20);//4
gbDatabase.Location = new Point(gbDatabase.Location.X, gbDatabase.Location.Y - 34);//6
rbTCPServer.Location = new Point(rbTCPServer.Location.X +20, rbTCPServer.Location.Y - 13);
rbTCPClient.Location = new Point(rbTCPServer.Location.X + 100, rbTCPServer.Location.Y);
rbNoService.Location = new Point(rbTCPServer.Location.X - 100, rbTCPServer.Location.Y);
lbServerIP.Location = new Point(lbServerIP.Location.X - 50, lbServerIP.Location.Y - 3);
txTCPIP.Location = new Point(lbServerIP.Location.X + 50, lbServerIP.Location.Y);
lbPort.Location = new Point(lbServerIP.Location.X + 125, lbServerIP.Location.Y);
txTCPPort.Location = new Point(640, lbServerIP.Location.Y);
cbInstallSDMobile.Visible = true;
cbInstallSDMobile.Location = new Point(cbInstallSDMobile.Location.X -40, cbInstallSDMobile.Location.Y + 4);
cbInstallSDMobile.ForeColor = Color.White;
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 50);
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 30);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 30);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 30);
break;
case RADIOTYPE.ATLAS:
gbDispatch.Location = new Point(gbDispatch.Location.X, gbDispatch.Location.Y - 12);
gbGateway.Location = new Point(gbGateway.Location.X, gbGateway.Location.Y - 21);//2
gbAdmin.Location = new Point(gbAdmin.Location.X, gbAdmin.Location.Y - 26);//4
gbDatabase.Location = new Point(gbDatabase.Location.X, gbDatabase.Location.Y - 34);//6
rbTCPServer.Location = new Point(rbTCPServer.Location.X -310, rbTCPServer.Location.Y - 25);
rbTCPClient.Location = new Point(rbTCPServer.Location.X + 100, rbTCPServer.Location.Y);
rbNoService.Location = new Point(rbTCPServer.Location.X - 100, rbTCPServer.Location.Y);
lbServerIP.Location = new Point(lbServerIP.Location.X - 380, lbServerIP.Location.Y - 15);
txTCPIP.Location = new Point(lbServerIP.Location.X + 60, lbServerIP.Location.Y);
lbPort.Location = new Point(lbServerIP.Location.X + 125, lbServerIP.Location.Y);
txTCPPort.Location = new Point(320, lbServerIP.Location.Y);
cbInstallSDMobile.Visible = true;
cbInstallSDMobile.Location = new Point(cbInstallSDMobile.Location.X-370, cbInstallSDMobile.Location.Y - 25);
cbDBinstall.Location = new Point(gbDatabase.Location.X + 218, gbDatabase.Location.Y + 50);
cbSDinstall.Location = new Point(gbDispatch.Location.X + 218, gbDispatch.Location.Y + 30);
cbGWinstall.Location = new Point(gbGateway.Location.X + 218, gbGateway.Location.Y + 30);
cbSUMinstall.Location = new Point(gbAdmin.Location.X + 218, gbAdmin.Location.Y + 30);
break;
case RADIOTYPE.SIMOCO:
//depend on the desing
//rbTCPServer.Location = new Point(rbTCPServer.Location.X + 60, rbTCPServer.Location.Y - 25);
rbTCPClient.Location = new Point(rbTCPServer.Location.X + 100, rbTCPServer.Location.Y);
rbNoService.Location = new Point(rbTCPServer.Location.X - 100, rbTCPServer.Location.Y);
//lbServerIP.Location = new Point(lbServerIP.Location.X - 10, lbServerIP.Location.Y - 15);
txTCPIP.Location = new Point(lbServerIP.Location.X + 50, lbServerIP.Location.Y);
lbPort.Location = new Point(lbServerIP.Location.X + 125, lbServerIP.Location.Y);
txTCPPort.Location = new Point(lbServerIP.Location.X+200, lbServerIP.Location.Y);
cbInstallSDMobile.Visible = true;
break;
}
//linkAdvance
}
private void rbTCPClient_ToggleStateChanged(object sender, StateChangedEventArgs args)
{
if (rbTCPClient.IsChecked)
{
txTCPPort.Enabled = true;
txTCPIP.Enabled = true;
}
}
private void rbTCPServer_ToggleStateChanged(object sender, StateChangedEventArgs args)
{
if (rbTCPServer.IsChecked)
{
txTCPPort.Enabled = true;
txTCPIP.Enabled = false;
}
}
private void rbNoService_ToggleStateChanged(object sender, StateChangedEventArgs args)
{
if (rbNoService.IsChecked)
{
txTCPPort.Enabled = false;
txTCPIP.Enabled = false;
}
}
private void cbSDinstall_ToggleStateChanged(object sender, StateChangedEventArgs args)
{
gbDispatch.Enabled = cbSDinstall.Checked;
}
private void cbGWinstall_ToggleStateChanged(object sender, StateChangedEventArgs args)
{
gbGateway.Enabled = cbGWinstall.Checked;
}
private void cbSUMinstall_ToggleStateChanged(object sender, StateChangedEventArgs args)
{
gbAdmin.Enabled = cbSUMinstall.Checked;
}
private void cbDBinstall_ToggleStateChanged(object sender, StateChangedEventArgs args)
{
gbDatabase.Enabled = cbDBinstall.Checked;
}
private void MainForm_Shown(object sender, EventArgs e)
{
txDefPortSUM.Enabled = true;
txDefPortSD.Enabled = true;
txDefPortGW.Enabled = true;
txDefPort.Enabled = true;
cbSDinstall.Checked = true;
cbGWinstall.Checked = true;
cbSUMinstall.Checked = true;
cbDBinstall.Checked = true;
cbSDinstall_ToggleStateChanged(cbSDinstall, null);
cbGWinstall_ToggleStateChanged(cbSDinstall, null);
cbSUMinstall_ToggleStateChanged(cbSDinstall, null);
cbDBinstall_ToggleStateChanged(cbSDinstall, null);
txDefPortSUM.Enabled = true;
txDefPortSD.Enabled = true;
txDefPortGW.Enabled = true;
txDefPort.Enabled = true;
}
}
//public enum RADIOTYPE
//{
// MOTO = 0,
// HYT = 1,
// HARRIS = 2,
// ATLAS = 3,
// SIMOCO = 4,
// UNKNOWN = 5,
// LINX = 6,
// LINXB = 7
//}
}