From 9d539eb9dae8ea8215e4bf436ff596e8c340c4b3 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Thu, 12 Sep 2024 08:43:34 +0200 Subject: [PATCH] arreglos varios --- .gitignore | 2 + SoloEnLan/App.config | 15 +++ SoloEnLan/Program.cs | 24 ++++- SoloEnLan/ProjectInstaller.Designer.cs | 60 +++++++++++ SoloEnLan/ProjectInstaller.cs | 19 ++++ SoloEnLan/ProjectInstaller.resx | 129 +++++++++++++++++++++++ SoloEnLan/Service1.Designer.cs | 14 ++- SoloEnLan/Service1.cs | 28 +++-- SoloEnLan/Service1.resx | 126 ++++++++++++++++++++++ SoloEnLan/SoloEnLan.csproj | 36 +++++++ SoloEnLan/SoloEnLan.csproj.user | 6 ++ SoloEnLan/model/monitor.cs | 79 ++++++++++++-- SoloEnLan/script/install.bat | 3 + SoloEnLan/script/unista.bat | 3 + SoloEnLan/service/NotificacionService.cs | 13 ++- SoloEnLan/service/conexionService.cs | 78 +++++++++++++- SoloEnLan/service/logService.cs | 22 ++++ SoloEnLan/service/shutdownService.cs | 3 +- SoloEnLan/solologo_ico.ico | Bin 0 -> 116527 bytes 19 files changed, 630 insertions(+), 30 deletions(-) create mode 100644 SoloEnLan/ProjectInstaller.Designer.cs create mode 100644 SoloEnLan/ProjectInstaller.cs create mode 100644 SoloEnLan/ProjectInstaller.resx create mode 100644 SoloEnLan/Service1.resx create mode 100644 SoloEnLan/SoloEnLan.csproj.user create mode 100644 SoloEnLan/script/install.bat create mode 100644 SoloEnLan/script/unista.bat create mode 100644 SoloEnLan/service/logService.cs create mode 100644 SoloEnLan/solologo_ico.ico diff --git a/.gitignore b/.gitignore index 73dec14..4d8edb2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ /SoloEnLan/bin/* /SoloEnLan/obj/* /packages/* +/MigrationBackup/* +/SoloEnLan/.vs/* diff --git a/SoloEnLan/App.config b/SoloEnLan/App.config index 193aecc..28499cb 100644 --- a/SoloEnLan/App.config +++ b/SoloEnLan/App.config @@ -3,4 +3,19 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/SoloEnLan/Program.cs b/SoloEnLan/Program.cs index be137ce..a275b22 100644 --- a/SoloEnLan/Program.cs +++ b/SoloEnLan/Program.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; +using System.Configuration; +using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace SoloEnLan @@ -15,11 +18,24 @@ namespace SoloEnLan static void Main() { ServiceBase[] ServicesToRun; - ServicesToRun = new ServiceBase[] + + if (int.Parse(ConfigurationManager.AppSettings["consola"]) == 1) { - new Service1() - }; - ServiceBase.Run(ServicesToRun); + var s = new SoloEnLan(); + s.inicia(); + while(true) + { + Thread.Sleep(100); + } + } + else + { + ServicesToRun = new ServiceBase[] + { + new SoloEnLan() + }; + ServiceBase.Run(ServicesToRun); + } } } } diff --git a/SoloEnLan/ProjectInstaller.Designer.cs b/SoloEnLan/ProjectInstaller.Designer.cs new file mode 100644 index 0000000..1685dfc --- /dev/null +++ b/SoloEnLan/ProjectInstaller.Designer.cs @@ -0,0 +1,60 @@ +namespace SoloEnLan +{ + partial class ProjectInstaller + { + /// + /// Variable del diseñador necesaria. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Limpiar los recursos que se estén usando. + /// + /// true si los recursos administrados se deben desechar; false en caso contrario. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Código generado por el Diseñador de componentes + + /// + /// Método necesario para admitir el Diseñador. No se puede modificar + /// el contenido de este método con el editor de código. + /// + private void InitializeComponent() + { + this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller(); + this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller(); + // + // serviceProcessInstaller1 + // + this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem; + this.serviceProcessInstaller1.Password = null; + this.serviceProcessInstaller1.Username = null; + // + // serviceInstaller1 + // + this.serviceInstaller1.Description = "Control de seguridad en lan"; + this.serviceInstaller1.DisplayName = "SoloEnLan"; + this.serviceInstaller1.ServiceName = "SoloEnLan"; + this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic; + // + // ProjectInstaller + // + this.Installers.AddRange(new System.Configuration.Install.Installer[] { + this.serviceProcessInstaller1, + this.serviceInstaller1}); + + } + + #endregion + + private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1; + private System.ServiceProcess.ServiceInstaller serviceInstaller1; + } +} \ No newline at end of file diff --git a/SoloEnLan/ProjectInstaller.cs b/SoloEnLan/ProjectInstaller.cs new file mode 100644 index 0000000..a7931f2 --- /dev/null +++ b/SoloEnLan/ProjectInstaller.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Configuration.Install; +using System.Linq; +using System.Threading.Tasks; + +namespace SoloEnLan +{ + [RunInstaller(true)] + public partial class ProjectInstaller : System.Configuration.Install.Installer + { + public ProjectInstaller() + { + InitializeComponent(); + } + } +} diff --git a/SoloEnLan/ProjectInstaller.resx b/SoloEnLan/ProjectInstaller.resx new file mode 100644 index 0000000..9f33750 --- /dev/null +++ b/SoloEnLan/ProjectInstaller.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 194, 17 + + + False + + \ No newline at end of file diff --git a/SoloEnLan/Service1.Designer.cs b/SoloEnLan/Service1.Designer.cs index beeaf22..0a17d96 100644 --- a/SoloEnLan/Service1.Designer.cs +++ b/SoloEnLan/Service1.Designer.cs @@ -1,6 +1,6 @@ namespace SoloEnLan { - partial class Service1 + partial class SoloEnLan { /// /// Variable del diseñador necesaria. @@ -28,10 +28,18 @@ /// private void InitializeComponent() { - components = new System.ComponentModel.Container(); - this.ServiceName = "Service1"; + this.eventLog1 = new System.Diagnostics.EventLog(); + ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit(); + // + // SoloEnLan + // + this.ServiceName = "SoloEnLan"; + ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit(); + } #endregion + + private System.Diagnostics.EventLog eventLog1; } } diff --git a/SoloEnLan/Service1.cs b/SoloEnLan/Service1.cs index 735101e..f1bf7cc 100644 --- a/SoloEnLan/Service1.cs +++ b/SoloEnLan/Service1.cs @@ -8,27 +8,41 @@ using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; - +using System.Diagnostics; +using SoloEnLan.service; namespace SoloEnLan { - public partial class Service1 : ServiceBase + public partial class SoloEnLan : ServiceBase { monitor m; - public Service1() + private string nombreService = "SoloEnLan"; + public SoloEnLan() { InitializeComponent(); - - m=new monitor(); + if(!EventLog.SourceExists(nombreService)) + { + EventLog.CreateEventSource(nombreService,"Application"); + } + logService.EventLog = eventLog1; + eventLog1.Source = nombreService; + eventLog1.Log = "Application"; + m =new monitor(); } - - protected override void OnStart(string[] args) + public void inicia() { m.start(); } + protected override void OnStart(string[] args) + { + logService.log("Se inicia " + nombreService); + //eventLog1.WriteEntry("Se inicia " + nombreService); + inicia(); + } protected override void OnStop() { m.fin(); + logService.log("Finaliza" + nombreService); } } } diff --git a/SoloEnLan/Service1.resx b/SoloEnLan/Service1.resx new file mode 100644 index 0000000..4cdd336 --- /dev/null +++ b/SoloEnLan/Service1.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + False + + \ No newline at end of file diff --git a/SoloEnLan/SoloEnLan.csproj b/SoloEnLan/SoloEnLan.csproj index 65db86b..6325951 100644 --- a/SoloEnLan/SoloEnLan.csproj +++ b/SoloEnLan/SoloEnLan.csproj @@ -12,6 +12,8 @@ 512 true true + + AnyCPU @@ -32,10 +34,15 @@ prompt 4 + + solologo_ico.ico + + + @@ -46,6 +53,12 @@ + + Component + + + ProjectInstaller.cs + Component @@ -55,11 +68,34 @@ + + + Always + + + Always + + + + + 7.1.3 + + + + + + + + ProjectInstaller.cs + + + Service1.cs + \ No newline at end of file diff --git a/SoloEnLan/SoloEnLan.csproj.user b/SoloEnLan/SoloEnLan.csproj.user new file mode 100644 index 0000000..9b86104 --- /dev/null +++ b/SoloEnLan/SoloEnLan.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/SoloEnLan/model/monitor.cs b/SoloEnLan/model/monitor.cs index 5b06764..ab64eab 100644 --- a/SoloEnLan/model/monitor.cs +++ b/SoloEnLan/model/monitor.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; +using Windows.Web.UI; namespace SoloEnLan.model { @@ -18,9 +19,9 @@ namespace SoloEnLan.model private int tiempoMensaje; public monitor() { - t = null; + t = new Thread(runMonitor); pirate = false; - tiempoComprobacion = int.Parse(ConfigurationManager.AppSettings["tiempoComprovacion"]); + tiempoComprobacion = int.Parse(ConfigurationManager.AppSettings["tiempoComprovacionPrime"]); tiempoMensaje = int.Parse(ConfigurationManager.AppSettings["tiempoNotificacion"]); } @@ -29,28 +30,90 @@ namespace SoloEnLan.model ((monitor)m).run(); } + private void espera(int nseg) + { + DateTime currentDate = DateTime.Now; + //espera + while (!pirate) + { + Thread.Sleep(1000); + long elapsedTicks = DateTime.Now.Ticks- currentDate.Ticks; + TimeSpan elapsedSpan = new TimeSpan(elapsedTicks); + if (elapsedSpan.TotalSeconds > nseg) + return; + } + } private void run() { - while(!pirate) + while (!pirate) { + DateTime currentDate = DateTime.Now; //espera - Thread.Sleep(tiempoComprobacion); + espera(tiempoComprobacion); + if (pirate) + continue; + + //Thread.Sleep(tiempoComprobacion*1000); //revisa lan - if (conexionService.Getestas()) + logService.log("Se comprueba Autorización"); + if (!ConectaSRV()) { + logService.log("Pc sin autorizacion"); + if (pirate) + continue; //manda mensaje NotificacionService.Notifica(); //espera despues de mensaje - Thread.Sleep(tiempoMensaje); + //Thread.Sleep(tiempoMensaje*1000); + espera(tiempoMensaje); + if (pirate) + continue; //apaga + logService.log("Se apaga maquina"); shutdownService.apagaPc(); } - Thread.Sleep(60); - + else + { + logService.log("Pc autorizado"); + } + tiempoComprobacion = int.Parse(ConfigurationManager.AppSettings["tiempoComprovacion"]); } } + private bool ConectaSRV() + { + for (int i = 0; i < 3; i++) + { + if (pirate) + return false; + //intenta a srv lan + var res= conexionService.ConectLanSRV(); + if( res<0) + espera(5); + else + { + return res == 1; + } + } + for (int i = 0; i < 3; i++) + { + if (pirate) + return false; + //intenta a srv lan + var res = conexionService.ConectExternSRV(); + if (res < 0) + espera(5); + else + { + return res == 1; + } + } + return false; + } + + + public void start() { diff --git a/SoloEnLan/script/install.bat b/SoloEnLan/script/install.bat new file mode 100644 index 0000000..b1592c0 --- /dev/null +++ b/SoloEnLan/script/install.bat @@ -0,0 +1,3 @@ +cd c:\Windows\Microsoft.NET\Framework64\v4.0.30319 +installutil.exe "C:\Program Files\soloEnLan\soloEnLan.exe" +pause \ No newline at end of file diff --git a/SoloEnLan/script/unista.bat b/SoloEnLan/script/unista.bat new file mode 100644 index 0000000..8f4a317 --- /dev/null +++ b/SoloEnLan/script/unista.bat @@ -0,0 +1,3 @@ +cd c:\Windows\Microsoft.NET\Framework64\v4.0.30319 +installutil /uninstall "C:\Program Files\soloEnLan\soloEnLan.exe" +pause \ No newline at end of file diff --git a/SoloEnLan/service/NotificacionService.cs b/SoloEnLan/service/NotificacionService.cs index 90cc448..e1d200b 100644 --- a/SoloEnLan/service/NotificacionService.cs +++ b/SoloEnLan/service/NotificacionService.cs @@ -1,7 +1,8 @@ -//using Microsoft.Toolkit.Uwp.Notifications; +using Microsoft.Toolkit.Uwp.Notifications; using System; using System.Collections.Generic; using System.Configuration; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,15 +13,19 @@ namespace SoloEnLan.service { public static void Notifica() { - /*string mens = ConfigurationManager.AppSettings["MensajeAviso"]; + string mens = ConfigurationManager.AppSettings["MensajeAviso"]; + string exe = ConfigurationManager.AppSettings["notifica.exe"]; + if(exe!="") + Process.Start(exe, " \"" + mens + "\""); + /* new ToastContentBuilder() .AddArgument("action", "viewConversation") .AddArgument("conversationId", 9813) .AddText("Aviso") .AddText(mens) .Show(); // Not seeing the Show() method? Make sure you have version 7.0, and if you're using .NET 6 (or later), then your TFM must be net6.0-windows10.0.17763.0 or greater - } - */ + */ + } } } diff --git a/SoloEnLan/service/conexionService.cs b/SoloEnLan/service/conexionService.cs index 8bde7ef..4b40865 100644 --- a/SoloEnLan/service/conexionService.cs +++ b/SoloEnLan/service/conexionService.cs @@ -1,6 +1,12 @@ using System; using System.Collections.Generic; +using System.Configuration; +using System.IO; using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Security.Policy; using System.Text; using System.Threading.Tasks; @@ -8,10 +14,76 @@ namespace SoloEnLan.service { internal class conexionService { - - public static bool Getestas() + private static int GetPermisoSRV(string sURL) { - return true; + var resf = -1; + + try + { + HttpClient client = new HttpClient(); + int.Parse(ConfigurationManager.AppSettings["tiempoComprovacion"]); + var nombre = System.Environment.MachineName; + client.BaseAddress = new Uri(sURL); + client.DefaultRequestHeaders.Accept.Clear(); + var res = client.GetAsync( + "?nombre="+ nombre).Result; + + if (res.IsSuccessStatusCode) + { + if (res.StatusCode == HttpStatusCode.OK) + { + var jsonResponse = res.Content.ReadAsStringAsync().Result; + if (jsonResponse != null && jsonResponse.Contains("OK")) + resf=1; + else + resf= 0; + } + } + client.Dispose(); + res.Dispose(); + } + catch (Exception e) + { + var ex = e.ToString(); + return -1; + } + + + return resf; + } + public static int ConectLanSRV() + { + try + { + + var sURL = ConfigurationManager.AppSettings["url"]; + return GetPermisoSRV(sURL); + } + catch(Exception e) + { + var ex = e.ToString(); + return -1; + } + + + return -1; + } + + public static int ConectExternSRV() + { + try + { + var sURL = ConfigurationManager.AppSettings["urlExtern"]; + return GetPermisoSRV(sURL); + } + catch (Exception e) + { + var ex = e.ToString(); + return -1; + } + + + return -1; } } } diff --git a/SoloEnLan/service/logService.cs b/SoloEnLan/service/logService.cs new file mode 100644 index 0000000..2a77b41 --- /dev/null +++ b/SoloEnLan/service/logService.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SoloEnLan.service +{ + internal class logService + { + public static EventLog EventLog=null; + + public static void log(string msg) + { + ;if(EventLog!=null) + { + EventLog.WriteEntry(msg); + } + } + } +} diff --git a/SoloEnLan/service/shutdownService.cs b/SoloEnLan/service/shutdownService.cs index 1e0db55..1986ce0 100644 --- a/SoloEnLan/service/shutdownService.cs +++ b/SoloEnLan/service/shutdownService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,7 +11,7 @@ namespace SoloEnLan.service { public static void apagaPc() { - + Process.Start("shutdown", "/s /f /t 0"); } } } diff --git a/SoloEnLan/solologo_ico.ico b/SoloEnLan/solologo_ico.ico new file mode 100644 index 0000000000000000000000000000000000000000..925e34bbb2c032bf31cd939b6c1af4e4481bd448 GIT binary patch literal 116527 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

qvuGbDD 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 Q2z4pt^g?{bIBNX=4+nPQjsO4v literal 0 HcmV?d00001