Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
WMI seriale hard disk
venerdì 11 novembre 2005 - 09.58
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Seventyone
Profilo
| Newbie
27
messaggi | Data Invio:
ven 11 nov 2005 - 09:58
Salve a tutti
in un accesso di pazzia avrei deciso di implementare una protezione ad una applicazione facendo in modo di creare un codice di attivazione che sia derivato dal SerialNumber dellHD dove è installato il programma, ovviamente non il seriale creato dalla formattazione ma quello univoco assegnato dalla casa costruttrice.
Utilizzando la System.Management e quindi WMI riesco a trovare i seriali degli HD ed anche lHD su cui si trova leseguibile dellapplicazione, il problema si pone perché non riesco a collegare le due cose perché il seriale dellhd lo trovo con la query SELECT * FROM Win32_PhysicalMedia mentre leseguibile lo trovo con "SELECT * FROM CIM_DataFile where FileName='NomeMiaApplicazione' and FileType='Applicazione'" da qui si possono ricavare altre informazioni, quella che avevo pensato di utilizzare è Drive che mi dà la lettera associata a quellHD (o partizione dello stesso cambia poco) e qui mi sono bloccato perché non sono riuscito a trovare un modo per associare questo risultato alla query per trovare il numero seriale dellHD,
ho pensato di associare Drive al CIM_LogicalDisk ma non cè niente che possa essere associato al risultato della prima query, qualche idea su come risolvere il problema?
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
ven 11 nov 2005 - 10:19
>ho pensato di associare Drive al CIM_LogicalDisk ma non cè
>niente che possa essere associato al risultato della prima query,
> qualche idea su come risolvere il problema?
Ciao,
non ho ben capito dove ti stai bloccando. Ho capito che vuoi creare un codice composito da serial number del disco fisso, unità di avvio ed eseguibile dell'applicazione.
Allora il serial number mi pare che già l'hai recuperato con le classi WMI, l'unità pure e anche l'eseguibile. (Fra parentesi unità e eseguibile li puoi recuperare anche senza WMI).
Ora il problema qual è ?
Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Seventyone
Profilo
| Newbie
27
messaggi | Data Invio:
ven 11 nov 2005 - 11:15
scusami probabilmente mi sono espresso male, io vorrei creare il codice di attivazione dal SerialNumber del disco fisso ora se il pc ha un unico disco il problema non si pone perchè basta la query "SELECT * FROM Win32_PhysicalMedia" da cui estraggo il seriale, ma se gli hd sono più di uno devo prendere il seriale di quello dove è installato il programma e qui utilizzo la seconda query (che in verità diventa la prima) "SELECT * FROM CIM_DataFile where FileName='NomeMiaApplicazione' and FileType='Applicazione'" questa query mi restituisce (tra gli altri) il valore Drive in questo caso è c: e nessun altro riferimento allhd, quindi tramite il valore di Drive dovrei risalire al serialNumber dellhd ma non riesco a trovare una terza query che mi faccia da collegamento fra le due query precedenti
quindi riassumendo faccio la query
"SELECT * FROM CIM_DataFile where FileName='NomeMiaApplicazione' and FileType='Applicazione'"
estraggo il valore Drive
nuova query che in base a Drive mi trovi lhd tra quelli logici
"SELECT * FROM CIM_LogicalDisk where DeviceID='"+drive+"'"
ultima query per trovare i valori di quellhd
"SELECT * FROM Win32_PhysicalMedia"
da qui estraggo il serial number
il problema è che nella seconda query (quella sui dischi logici) nessun valore è associabile allultima (dischi fisici)
Seventyone
Profilo
| Newbie
27
messaggi | Data Invio:
ven 11 nov 2005 - 11:18
per cortesia potresti indicarmi come recuperare questi valori anche senza WMI
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
lun 14 nov 2005 - 10:50
>per cortesia potresti indicarmi come recuperare questi valori
> anche senza WMI
Ciao,
allora, mi viene in mente un'altra soluzione. Mi sembra che la stai facendo più complicata di quanto realmente è.
Allora, io direi che ti basta tanto per cominciare un'enumerazione dei dischi. Lì avrai come risultato oltre ai vari serial number dei dischi anche le lettere C, D, Ecc. Poi da .NET vedi senza fare query ma con le istruzioni di .NET sull'Environment, dove è localizzato l'eseguibile esempio c:\programmi\ecc. prendi la prima lettera cioè il volume su cui è installato e fai un ciclo sulle lettere dei dischi rilevati con WMI, dove c'è corrispondenza (verifichi con un banale IF e con un ciclo For) prendi il Serial Number e poi crei il tuo codice di attivazione.
Non so se mi sono spiegato.
Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Seventyone
Profilo
| Newbie
27
messaggi | Data Invio:
mar 22 nov 2005 - 10:43
Ciao, scusa il ritardo ma ero fuori
utilizzare l'Environment è sicuramente un'ottima soluzione, sicuramente più veloce di quella che avevo trovato io, la utilizzerò sicuramente,
però non sono riuscito a capire come vorresti prendere il seriale fisico di quell'HD, la query che restituisce serial number e lettere di unità è la "SELECT * FROM CIM_LogicalDisk" ma restituisce i seriali logici non fisici e quindi soggetti a variazione se l'HD viene formattato, io ho utilizzato i WMI Tools per le query e non mi è parso ci fossero altre classi su cui fare la query per farmi restituire sia la lettera di unità che il serial number ma può darsi che non l'abbia vista, tu ne hai trovate altre?
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 23 nov 2005 - 15:48
>fisico di quell'HD, la query che restituisce serial number e
Ok ora ho capito, devi usare la classe Win32_PhysicalMedia che ha una proprietà che è Serial che corrisponde al seriale fisico del disco fisso.
>lettere di unità è la "SELECT * FROM CIM_LogicalDisk" ma restituisce
>i seriali logici non fisici e quindi soggetti a variazione se
>l'HD viene formattato, io ho utilizzato i WMI Tools per le query
>e non mi è parso ci fossero altre classi su cui fare la query
>per farmi restituire sia la lettera di unità che il serial number
In effetti ho provato a cercare anche io in questo senso per vedere se c'è un valore che può collegare in una sorta di Join volume logico con disco fisico. Non l'ho trovato ma credo ci sia. Scarica questo Tool intanto che si chiama Scriptomatic 2.0 non so se è simile a quello che usi tu ma io mi trovo molto bene:
http://www.microsoft.com/downloads/details.aspx?FamilyID=09dfc342-648b-4119-b7eb-783b0f7d1178&displaylang=en&Hash=WTJS3BC
ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !