Precedente :: Successivo |
Autore |
Messaggio |
Perito80 Mortale devoto
Registrato: 06/12/06 12:03 Messaggi: 6
|
Inviato: 06 Dic 2006 17:28 Oggetto: * Variabili d'ambiente |
|
|
Ciao a tutti,
per poter far partire un programma senza che mi dia errore devo inserire nelle variabili d'ambiente il percorso della licenza.
Il problema è che se creo la variabile LM_LICENSE_FILE con il percorso giusto tramite Pannello di controllo -> Sistema -> Avanzate -> Variabili d'ambiente e la creo nella sezione "Variabili d'ambiente per l'utente ..." tutto funziona perfettamente ed il programma si apre. Se invece creo la variabile tramite un processo creato da me (con il linguaggio C++) che mi lavora direttamente sul registro di sistema creando in HKCU\Environment la variabile LM_LICENSE_FILE (che poi viene creata in automatico anche su HKU\S ....\environment) il programma al momento dell'apertura mi da errore e si richiude.
Se dopo aver creato la variabile agendo solo sul registro di sistema (e quindi il programma non funziona) vado su Pannello di controllo -> Sistema -> Avanzate -> Variabili d'ambiente seleziono la variabile, faccio modifica, non modifico assolutamente nulla e confermo tutto il programma ora funziona perfettamente. Lo stesso accade se disconnetto e riconnetto il sistema.
Sapete dirmi agendo su Pannello di controllo -> Sistema -> Avanzate -> Variabili d'ambiente che cosa succede, oltre che modificarsi quella parte del registro di sistema che già so andare a modificare, che non mi rende necessario la disconnessione del sistema?
Grazie!! |
|
Top |
|
|
chemicalbit Dio maturo
Registrato: 01/04/05 17:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 06 Dic 2006 18:56 Oggetto: |
|
|
Probabilemnte quell'elenco è memorizzato in due "punti" diversi di windows, e con quella procedure "agiorni" la seconda copia (quella che vien effettivamente usata) copaindola dalla prima.
Purtroppo non me ne intendo,
ma -domanda- perché devi fareper forza così? |
|
Top |
|
|
madvero Amministratore
Registrato: 05/07/05 20:42 Messaggi: 19480 Residenza: Ero il maestro Zen. Scrivevo piccole poesie Haiku. Le mandavo a tutti via e-mail.
|
Inviato: 06 Dic 2006 20:07 Oggetto: |
|
|
in xp le variabili d'ambiente scritte nel registro di sistema, per essere definitive, necessitano del riavvio del sistema stesso.
il tuo "modifica" senza toccare alcunchè probabilmente equivale ad un refresh del registro, in modo che vengano caricate le nuove variabili al posto di quelle in memoria. |
|
Top |
|
|
horus Macchinista
Registrato: 22/03/05 09:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 07 Dic 2006 08:40 Oggetto: |
|
|
Sinceramente non so cosa succeda (non mi sono mai posto il problema) ma potresti fare una prova che io di solito uso per capire le modifiche al registro.
1. Apri regedit e fai un export completo.
2. Dal pannello fai la modifica
3. Apri regedit e fai un export completo.
4. confronti i due file creati ed ottieni esattamente le chiavi modificate (al massimo potrebbe venirti fuori qualcosa dell'antivirus o di programmi in background ma dovresti riconoscerli).
Se le modifiche sono le stesse che fai tu allora il problema non sta nel registro ma magari, come dice Madvero (e Microsoft) per quelle globali devi riavviare il sistema e per quelle per Nome Utente almeno i programmi che le devono leggere. |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 07 Dic 2006 17:31 Oggetto: Re: Variabili d'ambiente |
|
|
Perito80 ha scritto: | Se dopo aver creato la variabile agendo solo sul registro di sistema
...
che non mi rende necessario la disconnessione del sistema? |
cercando su Google ho trovato questa discussione che credo faccia al caso tuo:
http://groups.google.com/group/microsoft.public.vb.winapi/browse_thread/thread/c72ae12d4bdbff1c/a8bdcaa4f5e4fdec%23a8bdcaa4f5e4fdec |
|
Top |
|
|
Shannara Dio maturo
Registrato: 18/05/05 17:24 Messaggi: 1083 Residenza: In cerca di GRoANE
|
Inviato: 16 Dic 2006 11:33 Oggetto: |
|
|
Io programmo in Delphi, che è molto simile al C++. Per modifiche alla variabile PATH lancio il messaggio WM_SETTINGCHANGE. Suppongo che funzioni anche nel caso di nuove variabili.
Comunque ho preferito dare un occhio in rete e ho trovato questo articolo nella KB Microsoft:
http://support.microsoft.com/kb/104011/en-us
Tuttavia dice anche che per propagare la modifica ad applicazioni non MS in Windows 95/98 (ME?) il reboot è necessario. |
|
Top |
|
|
Perito80 Mortale devoto
Registrato: 06/12/06 12:03 Messaggi: 6
|
Inviato: 20 Dic 2006 15:41 Oggetto: |
|
|
A madvero:
penso anche io che il tasto medifica faccia un refresh del registro, ma quello che non so e che vorrei sapere è come si fa a fare il refresh, o qualunque altra cosa succeda, del registro.
A horus:
l'ho fatto, ma non mi ha trovato alcune differenze. Ho notato però che esporta solo HKEY_LOCAL_MACHINE e HKEY_USERS, non so se è un errore o è giusto così.
A SverX:
sto programmando in C++ e non in Visual Basic.
A Shannara:
già provata quella soluzione, ma non ho avuto effetti. Se è possibile non riavviare usando l'interfaccia windows penso che sia possibile farlo anche se non uso l'interfaccia windows, il problema è che ancora non so come fare, qualcuno dovrà pure saperlo. |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 20 Dic 2006 16:20 Oggetto: |
|
|
Perito80 ha scritto: | A SverX:
sto programmando in C++ e non in Visual Basic.
|
A Perito80:
un po' di elasticità... se in VB dice:
Codice: | Private Const HWND_BROADCAST = -1
Private Const WM_WININICHANGE = &H1A
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByRef lParam As Any) As Long
Dim x As Long
x = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 1, ByVal 0&) |
tu in C++ prova con:
Codice: | SendMessage(-1, 0x1A, 1, 0); |
|
|
Top |
|
|
Perito80 Mortale devoto
Registrato: 06/12/06 12:03 Messaggi: 6
|
Inviato: 20 Dic 2006 17:15 Oggetto: |
|
|
Niente SverX non funziona |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 21 Dic 2006 18:52 Oggetto: |
|
|
Perito80 ha scritto: | Niente SverX non funziona |
mmm... prova questo:
http://rubyforge.org/snippet/detail.php?type=snippet&id=56
anche se mi sembra la stessa cosa... magari prima prova con
Codice: | ret = SendMessage(0xFFFF, 0x1A, 1, 0); |
(mettiamo FFFF invece di -1, non si sa mai... e ricorda che "ret" e i parametri sono "long"... ovvero interi segnati su 16 bit....)
edit: leggendo il link postato da Shannara trovo
Codice: | SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM) "Environment", SMTO_ABORTIFHUNG,
5000, &dwReturnValue); |
che viene descritto esattamente come
Citazione: | To effect these changes without having to log off, broadcast a WM_SETTINGCHANGE message to all windows in the system, so that any interested applications (such as Windows Explorer, Program Manager, Task Manager, Control Panel, and so forth) can perform an update. |
|
|
Top |
|
|
Perito80 Mortale devoto
Registrato: 06/12/06 12:03 Messaggi: 6
|
Inviato: 21 Dic 2006 20:20 Oggetto: |
|
|
Provato anche questo, ma niente da fare. |
|
Top |
|
|
Perito80 Mortale devoto
Registrato: 06/12/06 12:03 Messaggi: 6
|
Inviato: 21 Dic 2006 20:34 Oggetto: |
|
|
Retifico, invece funziona.
Avevo solo errato a scrivere il codice. |
|
Top |
|
|
|