Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2012, 13:29   #1
TheMonzOne
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 2179
[C#] Da Windows Form a Windows Service

Ciao a tutti!
Come da titolo quello che vorrei fare è trasformare una Desktop Application o meglio una Windows Form in un Servizio di Windows, in modo che possa operare come tale e girare su un server.
L'Applicazione sotto forma di Form è già completata (o quasi), come faccio a trasformarla in un Servizio di Windows?
Attualmente uso un piccolo "trucchetto", ovvero tramite ServerAny faccio lanciare al servizio creato l'eseguibile della mia applicazione che quindi gira a tutti gli effetti come fosse un servizio.
Vorrei però fare a meno di ServerAny e creare di mio il servizio.

Una volta riuscito a fare quello, poi, dovrei trovare il modo di "monitorare" e gestire l'applicazione che, girando come servizio, non ha ovviamente GUI, quindi tutte le opzioni gestibili mediante la Form spariscono. C'è un modo semplice per farlo?
Per ora ho creato una semplicissima "Interfaccia" utente che tramite le socket non fa altro che mostrare i messaggi che arrivano sulla Form principale dentro una textarea. Qual è la struttura di controllo che mi permetterebbe di interagire con il servizio come se stessi usando la form nella sua forma Desktop?

Spero di aver espresso le mie necessità in modo chiaro, se dovesse servire posso postare anche piccole porzioni di codice per vedere come far interagire le varie strutture.

Grazie mille a tutti!
TheMonzOne è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2012, 17:47   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Se hai strutturato a livelli la tua applicazione non dovresti avere particolari problemi
Dovresti staccare l'interfaccia dalla logica applicativa e accettare comandi tramite socket che sostituiscono il comando impartito da interfaccia.
I risultati poi potresti visualizzarli tramite la stessa interfaccia che hai implementato adesso.
Questo sempre tutto in teoria, se invece hai la logica strettamente legata all'interfaccia sei nei guai!
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2012, 19:13   #3
TheMonzOne
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 2179
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Se hai strutturato a livelli la tua applicazione non dovresti avere particolari problemi
Dovresti staccare l'interfaccia dalla logica applicativa e accettare comandi tramite socket che sostituiscono il comando impartito da interfaccia.
I risultati poi potresti visualizzarli tramite la stessa interfaccia che hai implementato adesso.
Questo sempre tutto in teoria, se invece hai la logica strettamente legata all'interfaccia sei nei guai!
Temo di essere nei guai allora .
Grazie per la risposta innanzi tutto...tu come suggeriresti di procedere? Non sarebbe nemmeno troppo impensabile riscrivere anche l'applicazione...non dico da zero...ma quasi...alla fine la GUI è più che altro di "visualizzazione" e interrogazione...piuttosto non riesco a capire come potrei gestire variabili e strutture dall'esterno dell'applicazione.
Esplico: l'applicazione è una sorta di gateway di ricezione per la comunicazione con alcuni dispositivi remoti che si connettono via UDP e vengono registrati/interrogati/gestiti dal gateway...come faccio, ad esempio, ad estrapolare la lista dei dispositivi connessi ( nella fattispecie una ArrayList ) per pilotarli poi dall'eventuale interfaccia esterna?
Scusate se la cosa sembra banale, ma non ho molta esperienza a questi livelli...fin'ora ho fatto sempre e solo desktop application con una GUI standard....

Ultima modifica di TheMonzOne : 14-02-2012 alle 19:18. Motivo: precisazione
TheMonzOne è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2012, 23:39   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da TheMonzOne Guarda i messaggi
Temo di essere nei guai allora .
Lo supponevo

Quote:
Esplico: l'applicazione è una sorta di gateway di ricezione per la comunicazione con alcuni dispositivi remoti che si connettono via UDP e vengono registrati/interrogati/gestiti dal gateway...come faccio, ad esempio, ad estrapolare la lista dei dispositivi connessi ( nella fattispecie una ArrayList ) per pilotarli poi dall'eventuale interfaccia esterna?
Direi come fai adesso!
Supponiamo che il servizio faccia un autodiscovery dei dispositivi, avrà al suo interno una struttura dati che tiene traccia dello stato dei dispositivi es List<ConnectedDevice>.
Dovrai pensare ad un comando di GetConnectedDevices esposto dal servizio che l'interfaccia richiamerà per ottenere la lista e poi visualizzarla.
Se l'interfaccia dovesse interagire con i dispositivi potresti prevedere un comando SendCommand che il servizio interpreterà e girerà al dispositivo selezionato secondo il protocollo di comunicazione di quest'ultimo.

Se lo dovessi realizzare io userei Wcf con binding net.tcp integrandole nel servizio windows: http://msdn.microsoft.com/en-us/library/ff649818.aspx
Non hai bisogno di perdere il capo dietro socket e protocolli di comunicazione custom. E' facilmente espandibile ed estremamente potente.
Se mai dovesse essere il caso con le Wcf potresti pure esporre il tuo servizio (magari pure con protocollo soap) all'interno della rete e consentire una interrogazione remota, il tutto aggiungendo delle configurazioni e senza aggiungere una riga di codice.

La chiamata da parte della tua GUI risulterebbe estremamente banale, una semplice service reference e sei pronto ad interrogare il tuo servizio!
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2012, 08:07   #5
TheMonzOne
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 2179
La fai facile tu , mai vista quella roba...fortuna che c'è una montagna di documentazione.
Ok, ci provo...ci risentiamo tra un paio d'anni .

Grazie per ora!
TheMonzOne è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2012, 09:58   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da TheMonzOne Guarda i messaggi
La fai facile tu , mai vista quella roba...fortuna che c'è una montagna di documentazione.
Ok, ci provo...ci risentiamo tra un paio d'anni .

Grazie per ora!
Tranquillo che fai prima ad imparare ad usare Wcf che non a cercare di far funzionare una coppia di socket e ad inventare un protocollo per lo scambio dati!
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2012, 10:24   #7
TheMonzOne
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 2179
C'è già il primo intoppo : seguendo passo passo la procedura su msdn, arrivato al punto 6, installo il servizio e tutto sembra andare a buon fine, ma quando vado ad avviarlo mi da un errore.
"Impossibile avviare il servizio Service1 su Computer Locale. Errore 5: accesso negato"

Lavoro su Windows 7 Ultimate 32bit, Account Amministratore

EDIT: risolto questo problema cambiando l'impostazione dell'account da "NetworkService" a "LocalSystem"...mi chiedo se vada bene lo stesso.
Ora cerco di capire come funzionano i metodi di passaggio....

Ultima modifica di TheMonzOne : 15-02-2012 alle 14:28.
TheMonzOne è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
HONOR inaugura il primo ALPHA Flagship S...
Yamaha: ecco il brevetto del 'finto moto...
'Console obsoleta e utenti ingannati': u...
Stop al ransomware su Google Drive, graz...
L'IA è la nuova interfaccia utent...
Battlefield 6: confermata la dimensione ...
Windows 11 porta il Wi-Fi 7 alle aziende...
Logitech MX Master 4 subito disponibile ...
'Nonna Skyrim' dice addio all'RPG di Bet...
PlayStation 5 Slim a 399€ o bundle con N...
roborock Qrevo Curv S5X in offerta a 649...
Sapphire Nitro+ B850A WIFI 7: la nuova s...
CraftGPT: un giocatore costruisce ChatGP...
Il Conto Termico 3.0 è ufficiale:...
Tesla inaugura la stazione di ricarica S...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:12.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v