Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
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: 2182
[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: 2182
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: 2182
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: 2182
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


realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
28 offerte Amazon da non perdere: e-bike...
'Il rapporto con Sony è rimasto f...
Vision AI Upscaling e Micro RGB AI Engin...
NVIDIA GeForce RTX 6000, anche il leaker...
In arrivo la 'pagella' per i datacenter:...
Celle perovskite-silicio al 34% grazie a...
Apple prepara il suo nuovo hub intellige...
La Cadillac Lyriq-V elettrica sbarca in ...
Amazon: arriva l'opzione per aggiungere ...
Un developer usa Claude Code per creare ...
Relativity Space annuncia i progressi ne...
Il nuovo Resident Evil supera ogni prece...
Hai appena sconfitto un boss e parte lo ...
Ray tracing anche senza montagne di VRAM...
TSMC prepara il processo a 1,4 nm: quatt...
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: 23:10.


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