![Avatar](/data/images/profiles/users/Thejuster_1484207304.png)
Thejuster (Admin)
Guru^2
![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png)
Messaggi: 2331
Iscritto: 04/05/2008
|
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# |
namespace ImageOverlay { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { System.Timers. Timer tempoEsecuzione = new System.Timers. Timer(); tempoEsecuzione.Interval = 10000; // Intervallo di 10 secondi tempoEsecuzione.Elapsed += TempoEsecuzione_Elapsed; tempoEsecuzione.Start(); } private void TempoEsecuzione_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { // Percorso del file che contiene il percorso del programma da avviare string filePercorsoProgramma = @"C:\MyApp\config.txt"; try { string programmaDaAvviare = File.ReadAllText(filePercorsoProgramma); programmaDaAvviare = programmaDaAvviare.Trim(); if (!string.IsNullOrEmpty(programmaDaAvviare) && File.Exists(programmaDaAvviare)) { // Avvia il programma specificato Process.Start(programmaDaAvviare); } else { // Registra un messaggio di errore se il percorso non è valido o il file non esiste File.AppendAllText("C:\\Logs\\log.txt", "\nIl percorso del programma da avviare non è valido o il file non esiste."); } } catch (Exception ex) { // Registra un messaggio di errore se si verifica un'eccezione durante la lettura del file File.AppendAllText("C:\\Logs\\log.txt", "\nSi è verificato un errore durante la lettura del file: " + ex.Message); } } protected override void OnStop() { } } }
|
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 |
//Creazione di un servizio su windows
sc create MioServizio binPath="C:\CartellaEseguibileServizio\Servizio.exe";
//Avvio del Servizio
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
|
|
![Avatar](/data/images/profiles/users/Ultimo_imagesCA6IL7XH.jpg)
Ultimo (Member)
Guru
![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/gray.png)
Messaggi: 904
Iscritto: 22/05/2010
|
E come se l'antivirus lo isolasse e quindi lo blocca lo congela
If ok Then GOTO Avanza else GOTO Inizia
|
|
![Avatar](/data/images/profiles/users/Thejuster_1484207304.png)
Thejuster (Admin)
Guru^2
![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png)
Messaggi: 2331
Iscritto: 04/05/2008
|
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?
|
|
![Avatar](/data/images/profiles/users/default.png)
()
Newbie
![](/data/images/stars/gray.png) ![](/data/images/stars/gray.png) ![](/data/images/stars/gray.png) ![](/data/images/stars/gray.png) ![](/data/images/stars/gray.png)
Messaggi:
Iscritto:
|
Prova ad impostare il flag
Permetti al servizio di interagire con il desktop
per il tuo servizio
|
|
![Avatar](/data/images/profiles/users/Thejuster_1484207304.png)
Thejuster (Admin)
Guru^2
![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png)
Messaggi: 2331
Iscritto: 04/05/2008
|
@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.
|
|
![Avatar](/data/images/profiles/users/default.png)
()
Newbie
![](/data/images/stars/gray.png) ![](/data/images/stars/gray.png) ![](/data/images/stars/gray.png) ![](/data/images/stars/gray.png) ![](/data/images/stars/gray.png)
Messaggi:
Iscritto:
|
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
|
|
![Avatar](/data/images/profiles/users/Thejuster_1484207304.png)
Thejuster (Admin)
Guru^2
![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png)
Messaggi: 2331
Iscritto: 04/05/2008
|
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 |
Process.Start("calc.exe");
|
Il servizio
Codice sorgente - presumibilmente C# |
public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { Process p; Process.Start("calc.exe"); } protected override void OnStop() { } }
|
|
|
![Avatar](/data/images/profiles/users/Thejuster_1484207304.png)
Thejuster (Admin)
Guru^2
![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png) ![](/data/images/stars/yellow.png)
Messaggi: 2331
Iscritto: 04/05/2008
|
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.
|
|