Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - C# Servizi con disservizi.
Forum - C# / VB.NET - C# Servizi con disservizi.

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2331
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:31
Lunedì, 29/04/2024
Buongiorno ragazzi.
Mi servirebbe aiuto sulla realizzazione di un servizio in C#.

Il problema non è tanto il codice, ma e che proprio non fà quello che deve fare.


Supponiamo di creare un servizio del genere:

Codice sorgente - presumibilmente C#

  1. namespace ImageOverlay
  2. {
  3.     public partial class Service1 : ServiceBase
  4.     {
  5.         public Service1()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.  
  10.         protected override void OnStart(string[] args)
  11.         {
  12.             System.Timers.Timer tempoEsecuzione = new System.Timers.Timer();
  13.             tempoEsecuzione.Interval = 10000; // Intervallo di 10 secondi
  14.             tempoEsecuzione.Elapsed += TempoEsecuzione_Elapsed;
  15.             tempoEsecuzione.Start();
  16.         }
  17.  
  18.         private void TempoEsecuzione_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  19.         {
  20.             // Percorso del file che contiene il percorso del programma da avviare
  21.             string filePercorsoProgramma = @"C:\MyApp\config.txt";
  22.  
  23.             try
  24.             {
  25.                
  26.                 string programmaDaAvviare = File.ReadAllText(filePercorsoProgramma);
  27.  
  28.                 programmaDaAvviare = programmaDaAvviare.Trim();
  29.  
  30.                
  31.                 if (!string.IsNullOrEmpty(programmaDaAvviare) && File.Exists(programmaDaAvviare))
  32.                 {
  33.                     // Avvia il programma specificato
  34.                     Process.Start(programmaDaAvviare);
  35.                 }
  36.                 else
  37.                 {
  38.                     // Registra un messaggio di errore se il percorso non è valido o il file non esiste
  39.                     File.AppendAllText("C:\\Logs\\log.txt", "\nIl percorso del programma da avviare non è valido o il file non esiste.");
  40.                 }
  41.             }
  42.             catch (Exception ex)
  43.             {
  44.                 // Registra un messaggio di errore se si verifica un'eccezione durante la lettura del file
  45.                 File.AppendAllText("C:\\Logs\\log.txt", "\nSi è verificato un errore durante la lettura del file: " + ex.Message);
  46.             }
  47.         }
  48.  
  49.         protected override void OnStop()
  50.         {
  51.            
  52.         }
  53.     }
  54. }



Poniamo il caso di questo semplice test.
Che è in pratica e quello che mi servirebbe.

una volta compilato il progetto contenente il servizio, apro la console con privilegi di amministratore,

Codice sorgente - presumibilmente C# / VB.NET

  1. //Creazione di un servizio su windows
  2. sc create MioServizio binPath="C:\CartellaEseguibileServizio\Servizio.exe";
  3.  
  4. //Avvio del Servizio
  5. net start MioSerivizio



Cosa succede?
Il tutto funziona come dovrebbe funzionare, tranne un unico particolare.
L'applicazione che il servizio deve avviare, deve eseguire un paint su alcune immagini insomma tipo uno scambio
di immagini tra diverse applicazioni e poi caricarle sul web.

Succede che quando il servizio avvia il programma contenuto nel file di configurazione,
Il processo viene avviato si, Ma non esegue le operazioni che normalmente vengono eseguite aprendo l'applicazione manualmente.

Di default, creando un servizio tramite console con privilegi di amministratore, non dovrebbero esserci problemi.
Dovrebbe assegnare direttamente al servizio l'user LocalSystem.

Ma non riesco a venirne a capo. Perché il log non mi dà nessun errore e controllando tra i processi noto che l'appliazione è stata lanciata si, ma e come se fosse bloccata non so spiegare, tipo avviata ma congelata.
Non esegue le funzioni di paint e salvataggio delle immagini nella cartella.

Ultima modifica effettuata da Thejuster il 29/04/2024 alle 8:32


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 904
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 15:12
Lunedì, 29/04/2024
E come se l'antivirus lo isolasse e quindi lo blocca  lo congela


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2331
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:19
Lunedì, 29/04/2024
Uhm pensi quindi che in qualche modo l'antivirus di sistema o windows defender o quello che è mi blocca il programma?

Devo disabilitare completamente tutto?


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:49
Lunedì, 29/04/2024
Prova ad impostare il flag

Permetti al servizio di interagire con il desktop

per il tuo servizio

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2331
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:22
Martedì, 30/04/2024
@nessuno

Avevo provato anche a spuntare il flag per interagire con il desktop.
Ma niente.
Non ho ancora provato a disabilitare l'antivirus ma pensa che serva poco o niente.

Come fanno gli altri servizi ad aprire processi?
non penso che bi-passano l'antivirus di sistema o quant'altro.




https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 10:22
Martedì, 30/04/2024
La questione è che lanci un eseguibile e non si sa di quale eseguibile si tratta nè cosa fa.
Prova ad eseguire Notepad Co il flag dell'interazione su desktop

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2331
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:36
Mercoledì, 01/05/2024
Niente nessuno.
Ho provato a scaricare NSSM, che è una GUI per l'installazione di servizi,
Ma peggio ancora.
Una volta installato il servizio va subito in pausa o si arresta senza scrivermi nulla nel log.
Sicuro di aver spuntato l'opzione Interagisci con il Desktop.

Ho provato a fare il tuo esempio, quello di avviare una calcolatrice esempio.

Ho scritto un semplice codice:

Codice sorgente - presumibilmente Plain Text

  1. Process.Start("calc.exe");




Il servizio
Codice sorgente - presumibilmente C#

  1. public partial class Service1 : ServiceBase
  2.  {
  3.      public Service1()
  4.      {
  5.          InitializeComponent();
  6.      }
  7.  
  8.      protected override void OnStart(string[] args)
  9.      {
  10.          Process p;
  11.          Process.Start("calc.exe");
  12.      }
  13.  
  14.      protected override void OnStop()
  15.      {
  16.      }
  17.  }




sc create MioServizio binPath="C:\Users\***\source\repos\AppServ\bin\Debug\AppServ.exe"

https://i.ibb.co/Cv24zz4/image.png


net start MioSerivio

Servizio MioServizio in fase di avvio .
Avvio del servizio MioServizio riuscito.


Non succede nulla. il servizio è avviato

https://i.ibb.co/sggZ651/image.png

Non sò magari serve un gruppo?

Andando nel registro di sistema:

https://i.ibb.co/qdY6062/image.png






https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2331
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:53
Mercoledì, 01/05/2024
Anzi mi correggo, Se faccio aprire calc.exe, appare si.
Ma il resto del codice rimane morto.

Spiego.

Se all'interno nel codice, prima di far eseguire il paint su un'immagine


Process.Start("calc.exe");
Appare ma poi tutto il resto sotto

Bitmap b = new Bitmap();
ecc. ecc.

non va.
Mi esegue il calc si, ma il resto non fa nulla.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote