Newsgroup: it.comp.lang.visual-basic
Titolo: Permettere l'esecuzione di un solo programma prefissato

Ho un applicativo (Timesheet) scritto in VB & MSSqlServer mediante il quali
gli utenti una volta loggati inseriscono le ore spese per progetto.
Ora mi hanno chiesto di fare in modo che l'utente in ritardo di un giorno di
compilazione non possa utilizzare il PC senza aver aggiornato i giorni in
ritardo.
In pratica sul PC deve "funzionare" solo l'applicativo in questione e niente
altro ( chiaramente Windows + servizi di rete ...).
La mia prima idea è quella di scrivere un programma A che
- si carica all'avvio del sistema
- verifica se l'utente windows è presente nel DB dell'applicativo e in caso
affermativo
- verifica se l'utente è in ritardo con la compilazione
- se non è in ritardo il programma A viene chiuso
- se l'utente è in ritardo viene lanciato l'applicativo B (Timesheet) e
"costringe" l'utente a compilarlo.
Ma come si fa?
- Posso permettere tramite VB l'esecuzione del solo applicativo B ?
- Oppure devo lavorare con una specie di pop up ciclico finche non
compilano?
- Posso proteggere il mio applicativo A dall'essere terminato da taskmanager
?
- ???
Mi sapete dare qualche suggerimento in merito?
Grazie
Hubert

 ?
Certo, lo devi far partire come un servizio, cerca "Servizi" + Windows su
Google.
Trovi molti esempi.
Bye,
--
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site (
http://www.tekkentag.altervista.org/
 )
Webmaster di SceptilePage (
http://www.sceptilepage.altervista.org/
 )
Account Messenger: 
thetot...@msn.com
MyBLOG (NEW!!) 
http://spaces.msn.com/members/itanet/

 Mi sapete dare qualche suggerimento in merito?
Ignora il suggerimento di Carmine che come al solito non perde tempo per 
dimostrare la propria incompetenza.
Da win2000 in su, i servizi, come i programmi si terminano "semplicemente" 
da task manager.
Su che computer deve girare l'applicativo?
Gli utenti hanno diritti di amministratore su tali pc?
Gli utenti si devono loggare a un dominio?
Le idee che mi vengono in mente sono tutte correlate alla presenza di un 
amministratore del computer diverso dall'utente stesso. Lanciando un 
servizio con privilegio di admin, eviti che possa essere terminato 
dall'utente.
Giocando con questa proprieta' puoi forzare l'inserimento.
Poi se gli utenti sono in realta' utonti, te la puoi cavare senza troppi 
fronzoli con accorgimenti meno complessi: il loop di popup che ipotizzavi 
combinato magari con SetWindowPos (primo piano forzato) e hook di 
tastiera/mouse.
hth,
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs
­/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs
­/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org
 

 tastiera/mouse.
Non è molto facile, e può recare "danni"...
Devi trovare i principali messagi di sistema (usa spy++) e utilizzando il
subclassing, eliminarli in modo che non arrivano al kernel.
Cosa semplicissima che consiglio è nascondere la barra con start ecc...,
trovi un esempio sul sito comune ( 
http://www.it-lang-vb.net/
 ) che si
chiama HideWin mi pare; dovrebbe fare proprio al caso tuo.
E COMUNQUE: NON SONO UN INCOMPETENTE, CAPITO???
Ciao,


 E COMUNQUE: NON SONO UN INCOMPETENTE, CAPITO???
PISC!
Lokar 

 PISC!
E che vorrebbe dire? :-)
ps: ho già cercato su google...
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 E che vorrebbe dire? :-)
La cosa e' un po' complessa =)
Diciamo che e' un incrocio del dialetto romano con i suoni onomatopeici dei 
fumetti giapponesi.
A Roma quando "ignori" una persona bellamente, si dice che la "pisci". Si 
usa anche nel senso di "sbolognare" o anche per dire che gli hai dato buca 
a un appuntamento...
Presente nei fumetti giapponesi quando per esempio qualcuno viene schizzato 
con l'acqua e scrivono "SCHIZZ!" o quando chiudono una porta e scrivono 
"CHIUD", eccetera?
Ecco, PISC (si legge "PISH") e' il "rumore" che si fa quando si "piscia" 
qualcuno :-P
Lokar
P.S. Per la cronaca non sono malato di mente, e' un termine comune in un 
gioco di ruolo online che frequento... diciamo che ho postato senza pensare 
che fuori dell'ambiente e' incompreso.
P.P.S. Per la cronaca, il codice postato as is dal beota, non funziona (che 
sorpresa!). Con le opportune correzioni (e' stato scopiazzato da AllApi, 
fra l'altro) non funziona sotto Windows XP. Peraltro la funzione 
RegisterServiceProcess e' non supportata da Windows NT, quindi la cosa non 
mi stupisce. Per concludere, quella funzione (quandanche fosse stata 
utilizzabile) avrebbe reso il processo un SERVIZIO, e in quanto tale 
(eccezion fatta per Win9X) VISIBILE e TERMINABILE da Task Manager. Ma e' 
inutile cercare di spiegare ste cose a chi si dichiara competente senza 
averne titolo e dopo aver dimostrato giorno dopo giorno il contrario.
P.P.P.S Appro, Sergio, sono stato illuminato! Mai piu' database... sono 
pericolosi! E se poi parliamo di Access... Brrr! Dio ci aiuti!


 averne titolo e dopo aver dimostrato giorno dopo giorno il contrario.
IO NON SONO UN BEOTA, CAPITO STORDO?
e comunque, come mai a me non si vede la risposta che ho inserito?
E POI... TI ODIO LOKAR, STATTI ZITTO E NON ROMPERE.


Carmine ha scritto:
(snip)
Carmine, per favore, non urlare.
Oltre a darti del beota (cosa che, ammetto, non è molto simpatica), Lokar
ha fatto anche delle motivate critiche al tuo codice. Se vuoi davvero
dimostrare che non sei un beota, prova a smontare "tecnicamente" le
critiche che ti sono rivolte.


 critiche che ti sono rivolte.
Benissimo,
Allora, la cosa del subclassing è giustissima, e ce la ho consigliata,
quindi ho risposto BENE.
In quanto al codice, che cazzo ne so di che hanno scritto sul sito, anche a
me pareva strano... ma stava scritto appunto per winNT/2k... poi non so.
Inoltre ho dato anche il consiglio della barra con start ecc... ed è
GIUSTISSIMO.
Quindi, sarei beota io???
Bye,
p.s.: ma come mai i messaggi che posto io OE non me li fà vedere?


 Oltre a darti del beota (cosa che, ammetto, non è molto simpatica)
Quando ci vuole ci vuole, dico io. E poi era solo una constatazione:
Dal Garzanti online (
www.garzantilinguistica.it
):
Beota:
2 (fig.) persona ottusa
Lokar4U
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs
­/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs
­/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org
 

 Quando ci vuole ci vuole, dico io.
Appunto, tu sei il Beota modello. (Tu sei una classe (che sò cosa è) e ogni
giorno, quando ti guardi allo specchio, dichiari come global una nuova
instanza di Lokar.Beota)
Bye,


 p.s.: ma come mai i messaggi che posto io OE non me li fà vedere?
Ti sarai plonkato da solo, come nelle migliori tradizioni.


 Ti sarai plonkato da solo, come nelle migliori tradizioni.
ROTFL 8,) E' come sparare sulla croce rossa cmnque... 8)
Lokar

 E se poi parliamo di Access... Brrr! Dio ci aiuti!
si potrebbe motivare?
--
a.cara

 si potrebbe motivare?
Era una presa in giro, non e' farina del mio sacco. Vedi botta e risposta 
Carmine-Sergio su "Random Access Files, perchč no?" pochi post piu' in 
alto. Vedi anche altro mio riferimento in questo thread alle "iniezioni 
sql" del thread segnalato.
Lokar.tanto.per.non.prendere.tutto.sul.serio
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs
­/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs
­/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

 Ti sarai plonkato da solo, come nelle migliori tradizioni.
un bel ROTFLONE prima di cena :-)
-- 
ciao, hal

> Ti sarai plonkato da solo, come nelle migliori tradizioni.
Emh...
Non riesco a trovare il Thread dove mi sono plonkato (SE mi sono
plonkato)... c'è un altro modo in OE di splonkare?
Bye,


 
Ma STRAROTFL!
-- 
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it
Sinapsi Antispam. Antispam Gratuito.
http://www.nicolaottomano.it/sinapsi.htm
email spamtrap: 
spam...@nicolaottomano.it

 2 (fig.) persona ottusa
Cmq ragazzi non quotatelo, altrimenti la balcklist non serve a nulla...
Dovro blacklistare anche voi...
Con il rischio di autoblacklistarmi... :-PPP
bye


 tastiera/mouse.
Lokar, aggiungerei che può fare un controllo sui task aperti, chiudere 
quelli che non dovrebbero essere attivi e attivare solo quelli che 
invece dovrebbero esserlo (a tal proposito potrebbe usare una lista 
salvata su file criptato,... giusto per rompere le scatole al lamer di 
turno). Il sistema è buono e funziona (testato sul mio "ProteggiBimbo") 
anche se al mio sw non impedisco la chiusura (per svariati motivi).
Inoltre disabiliti l'accesso al task manager di windows 2000 settando i 
permessi per i vari utenti, così non ti devi preoccupare di chi vuole 
chiudere l'app dal task manager (come ha già scritto Lokar)
Altro sistema (ma non so se l'antivirus te lo fa passare, perchè è un 
sistema usato dai virus) è quello di andare a modificare la chiave di 
registro:
HKEY_LOCAL_MACHINE\Software\Classes\Exefile\Shell\Open\Command
dal valore "%1" %*  al valore "tuoprogramma.exe" "%1" %*
in questo modo tutte le volte che si esegue un .exe (ma non un .com)
viene invocato "tuprogramma.exe" che provvede a fare i suoi controlli e, 
se l'applicazione è quella consentita, lancia l'eseguibile.


[Mega Cut]
Scusate se rispondo solamente ora ma sto lavorando in montagna fra
temporali e modem lentissimo.
Qualcuno mi ha suggerito di verificare se la rete aziendale utilizza
Active Directory e in caso afferamativo di "giocare" poi con le policy.
Comunque mi sembra di aver sottovalutato la difficoltà della
richiesta.
Continuo la mia ricerca (e magari anche voi).
Grazie per i vari suggerimenti.
Hubert

 della richiesta.
Io non ho mai affrontato la questione, e quindi ho dato solo qualche 
suggerimento di massima. Le soluzioni suggerite da Nicola, invece, sono 
ottime e di semplice implementazione. In particolare il giochetto con le 
chiavi di registro che quoto:
HKEY_LOCAL_MACHINE\Software\Classes\Exefile\Shell\Open\Command
dal valore "%1" %*  al valore "tuoprogramma.exe" "%1" %*
Ti consiglio di perseguire questa strada, assai piu' semplice che giocare 
con le policy di Active Directory (che poi non capisco cosa c'entrino con 
l'esecuzione di file in locale?).
Happy Coding =)


 plonkato)... c'è un altro modo in OE di splonkare?
Carmine, parliamo seriamente, adesso...
La locuzione "ti sarai plonkato da solo", intendeva significare che hai
erroneamente inserito il tuo indirizzo di posta elettronica nell'elenco di
quelli che oe considera "sgraditi" e quindi da ignorare (non te li fa
proprio vedere).
Il che, naturalmente, è solo un ipotesi.
Per verificarla prova ad andare, all'interno di OE, in tool (suppongo
strumenti, ma ho qui solo la versione ing), message rules (Regole
messaggi?), Blocked sender list (lista mittenti bloccati ?) e guarda cosa
c'è.
hth, per il resto, suppongo che un po' più di umiltà potrebbe farti bene.


 l'esecuzione di file in locale?).
Vorrei solo precisare che il mio sistema (seppur di facile 
implementazione) potrebbe presentare alcuni rischi qualora il file 
"tuoprogramma.exe" andasse in crash (saresti costretto a riavviare la 
macchina)


 macchina)
Non noto alcuna differenza con il comportamento standard di windows...


 Non noto alcuna differenza con il comportamento standard di windows...
LOL!


 hth, per il resto, suppongo che un po' piů di umiltŕ potrebbe farti bene.


 Carmine, parliamo seriamente, adesso...
Melchiade, parliamo seriamente.
Questo Carmine, il suo arrivo pulcinesco, il suo tirarsela, il suo 
postare random e frenetico, non ti ricorda qualcuno?
Che dici, gli affibbiamo una botte?
Alberto
-- 
I have a dream that my four little children
will one day live in a nation where they
will not be judged by the color of their skin
but by the content of their character.

 chiudere l'app dal task manager (come ha già scritto Lokar)
Funziona pure con winXP...
ecco come fare(codice VB6) :
'Modulo Module1.bas
Option Explicit
Dim r As Long
Public Sub CreateKey(Folder As String, Value As String)
Dim b As Object
On Error Resume Next
Set b = CreateObject("wscript.shell")
b.RegWrite Folder, Value
End Sub
Public Sub CreateIntegerKey(Folder As String, Value As Integer)
Dim b As Object
On Error Resume Next
Set b = CreateObject("wscript.shell")
b.RegWrite Folder, Value, "REG_DWORD"
End Sub
Public Property Get ReadKey(Value As String) As String
Dim b As Object
On Error Resume Next
Set b = CreateObject("wscript.shell")
r = b.RegRead(Value)
ReadKey = r
End Property
Public Sub DeleteKey(Value As String)
Dim b As Object
On Error Resume Next
Set b = CreateObject("Wscript.Shell")
b.RegDelete Value
End Sub
'Form1
Public Function disa()
CreateIntegerKey
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
\DisableTaskmgr", "1"
End Function
Public Function ena()
CreateIntegerKey
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
\DisableTaskmgr", "0"
End Function
'Come fare:
'Basta mettere:
'Call ena ; per abiliatare il taskmanager
'Call disa : per disabilitare il taskmanager
Spero di essere stato di aiuto,
Ciao a tutti,



Ma LOL! Non ci posso credere... troppo forte!
PS:
Che ne dite di adottarlo come mascotte?

 Che dici, gli affibbiamo una botte?
???


> Ma LOL! Non ci posso credere... troppo forte!
Ehh... già... capita...
Comunque che ne dite se facciamo pace e non mi "odiate" +?


 Con il rischio di autoblacklistarmi... :-PPP
-.-


 Con il rischio di autoblacklistarmi... :-PPP
TU MI HAI BLACKLISTATO ????????????????????????????????????
UAAAAAAAAA!!!


 Trovi molti esempi.
Carmine, ma quando posti, digiti a caso sulla tastiera?
Ti rendi conto che certe minchiate fanno perdere tempo a chi lavora?
Pensa se adesso l'OP si mette a lavorare una settimana per trasformare 
il suo applicativo in un servizio, per poi scoprire che non c'entra una 
fava col suo problema...


 altrimenti la balcklist non serve a nulla...
che e', un incrocio tra una blacklist ed una bulklist? ;-)
-- 
ciao, hal

 instanza di Lokar.Beota)
Allora Lokar è la libreria, non la classe.


> Allora Lokar è la libreria, non la classe.
E' il namespace...
Bye,


 E' il namespace...
Non c'è il tag [.Net].
Comunque sia, non sarebbe la classe.
Era l'unica cosa pseudo tecnica contenuta nella tua frase.
Ed era sbagliata...


 Ed era sbagliata...
NON era sbagliata; non ho specificato "in .net".


 NON era sbagliata; non ho specificato "in .net".
ok, signor sotutto, ci decidiamo intanto a mettere
a posto quel cavolo di newsreader completamente fuori
standard?
-- 
ciao, hal

 standard?
Cosa ha di male il mio newsreader???


 Mi sapete dare qualche suggerimento in merito?
Ciao,
secondo il mio punto di vista, non è "elegante" una soluzione del tipo "o 
inserisci le ore o non lavori con il pc".
Io proporrei una soluzione meno invasiva, ma non per questo, meno 
imperativa.
Parli di "ore spese per progetto" quindi deduco (ammazza quanto sono 
intelligente) che ci sia anche un responsabile di progetto.
Io mi limiterei a realizzare un reminder che informi l'utente del ritardo, 
dando la possibilità di "rimandare" per qualche volta l'avviso.
Ad ogni "ri-schedulazione" informerei, tramite email, il responsabile di 
progetto il quale, essendo appunto "Responsabile", potrà chiedere 
spiegazioni al diretto interessato, procedendo anche ad eventuali 
ammonizioni/penalizzazioni economiche.
In sostanza:
1) L'utente esegue il logon sul sistema
2) Viene identificato come 'ritardatario' nella compilazione del un modulo 
ore
3) Viene "invitato" alla compilazione, fornendo altresì la possibilità di 
rimandare per x tempo/x volte tale avviso
4) Ripetizione al punto 3 fino al raggiungimento del tempo/schedulazioni 
massime consentite
5) Ad ogni eventuale ri-schedulazione, informerei il responsabile di 
Progetto.
Ciao
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca


Hai ragione ma il committente è stato tassativo: "non devono poter
utilizzare il PC se non per inserire le ore"
Grazie a tutti per i consigli e spunti. Mi farò sapere come avrò risolto il
tutto.
hubert

 ha scritto


usa il tuo programma come shell invece di explorer, inibendo ctrl-esc,
alt-tab, ecc.
occhio che se crolla il prog poi ci vuole il cacciavite, o quasi :)
ciao, a.

 utilizzare il PC se non per inserire le ore"
Aspetta. Questo è diverso da quello che hai chiesto inizialmente:
"...Ora mi hanno chiesto di fare in modo che l'utente in ritardo di un 
giorno di
compilazione non possa utilizzare il PC senza aver aggiornato i giorni in
ritardo..."
Se effettivamente il tuo scopo è solo quello di far utilizzare il PC con 
un unico e solo programma, puoi semplice utilizzare la chiave del registry 
"RestrictRun":
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\
"The RestrictRun subkey contains a list of programs that restricted users 
can still run. This list is used only when the value of the RestrictRun 
entry is 1.
This subkey stores the contents of the Show Contents box in the Run only 
allowed Windows applications Group Policy. Group Policy adds this subkey 
and its entries to the registry when you enable the policy. If you disable 
the policy or set it to Not configured, Group Policy deletes this subkey 
and its entries from the registry.
The entries in this subkey comprise a complete list of the Windows 
programs which affected users can run. If a program is not represented by 
an entry in this subkey, users cannot run the program. If no entries 
appear in this subkey, users cannot run any programs started by Windows 
Explorer.
Each entry in this subkey represents a Windows program, such as Notepad, 
and contains the name of the executable file for the program, such as 
Notepad.exe. The number that names this entry only represents the order in 
which the programs are entered. It does not affect the feature.
This policy only prevents users from running programs that are started by 
the Windows Explorer process. It does not prevent users from running 
programs such as Task Manager, which are started by the system process or 
by other processes. Also, if users have access to the command prompt, 
Cmd.exe, this policy does not prevent them from starting programs in the 
command window that they are not permitted to start by using Windows 
Explorer."
Ciao!


 ha scritto nel messaggio
news:dat96o$v0e$4...@area.cu.mi.it...

Probabilmente non sono stato molto chiaro: Effettivamente l'utente dovrebbe
poter utilizzare solo un unico programma: quello di compilazione ore in caso
di mancato aggiornamento dello stesso.
Grazie
hubert

 NON era sbagliata; non ho specificato "in .net".
Appunto.
E comunque sarebbe stata sbagliata anche in .Net, come lo è in VB6.
Ma fai apposta o veramente ci credi, in quello che scrivi?


 compilazione ore in caso di mancato aggiornamento dello stesso.
OK, allora vale il mio primo consiglio.
Ciao
