View Full Version : Aiuto [cn73] per interfacciamento registro win!
c'e' un problema: non esiste nella classe RegistryKey un metodo getStringValue che mi dia una String[] in ritorno!
nel senso che non posso prendere i valori di chiavi del registro che siano multi_sz ... con getStringValue mi viene restituito solo il primo valore e basta!
come posso fare?
Ricapitolami un po' che nn ricordo che codice ti avevo dato!
ho usato le classi di quel package che mi hai consigliato e basta.. l'altro codice che mi avevi postato non l'ho usato.. Utilizzo un RegistryKey che mi pare abbia solo il metodo nativo getStringValue che pero' si userebbe solo con reg_sz singolo... non riesco invece a prendere i valori da registri multipli...
misturas
11-06-2004, 08:17
Ciao, se esponi meglio il tuo problema e usi MFC/Win32
forse posso esserti d'aiuto:mano:
ho usato jniregistry che si trova su questo sito http://www.trustice.com/java/jnireg/index.shtml
purtroppo non c'e' il metodo che data una chiave che ha un valore di tipo multistringa mi ridia la multistringa! c'e' solo un metodo che funziona per i valori monostringa... se lo uso su un multistringa, mi da' indietro chiaramente solo la prima riga..
Usai quel package anni fa per trovare la directory di installazione di Microsoft Word sulla macchina. Purtroppo ora non ho molto tempo, ma ti riporto l'intera classe che realizzai per i miei scopi, puoi prendere spunto per realizzare qualcosa che fa al caso tuo:
package com;
import java.util.Enumeration;
import com.ice.jni.registry.*;
public class WrapperRegistryKey
{
protected String keyData;
public WrapperRegistryKey()
{
super();
}
public RegistryKey getRegistryKey(RegistryKey rootKey,
String subKey, String key, String keyData)
{
this.keyData = keyData;
RegistryKey rk = Registry.openSubkey(rootKey,subKey,
RegistryKey.ACCESS_READ);
return searchKey(rk,key);
}
public String getValueString(RegistryKey rk,String valueName)
{
String value = null;
try
{
RegistryValue rv = rk.getValue(valueName);
byte[] bytes = rv.getByteData();
value = new String(bytes);
if(value.substring(0,1).equals("\""))
value = value.substring(1);
int length = value.length();
if(value.substring(length - 1,length).equals("\""))
value = value.substring(0,length -1);
}catch(NoSuchValueException nsve){
System.out.println("NoSuchValueException: " + nsve.getMessage());
}catch(RegistryException re){
System.out.println("RegistryException: " + re.getMessage());
}
return value;
}
protected RegistryKey searchKey(RegistryKey rootKey, String key)
{
RegistryKey rk = null;
try
{
for(Enumeration en = rootKey.keyElements();en.hasMoreElements();)
{
String curKey = (String)en.nextElement();
//System.out.println("Registry sub key: " + curKey);
if(!curKey.equals(key))
{
try
{
RegistryKey curRK = rootKey.openSubKey(curKey);
rk = searchKey(curRK,key);
if(rk != null)
break;
}catch(Exception ex){
System.out.println("Recursive key search--" + curKey +
": " + ex.getMessage());
}
}
else
{
try
{
RegistryKey r = rootKey.openSubKey(key);
if(keyData != null && !keyData.equals(key))
{
System.out.println("Chiave trovata per " + key);
rk = searchKey(r,keyData);
if(rk != null)
{
System.out.println("Chiave trovata " + rk + " per " + keyData);
break;
}
}
else
{
rk = r;
break;
}
}catch(Exception ex){
System.out.println("Recursive key search--" + curKey +
": " + ex.getMessage());
}
}
}
}catch(RegistryException re){
System.out.println("Search Key Exception: " + re.getMessage());
rk = null;
}
return rk;
}
}
oki mo guardo.. senti visto che ti intendi di rmi... il client lavora su una copia del server?? nel senso nel server ho messo un metodo
public String Riavvia() throws IOException{
try{
Runtime.getRuntime().exec("shutdown /r -t 0");
return "bene";
}
catch(IOException exce){
return exce.getMessage();
}
}
che dovrebbe riavviare la macchina sulla quale e' installato.. mi da' pero' l'errore :
Create Process: shutdown /r -t 0 error=2
se eseguo shutdown da locale pero' funziona... e' un problema di policy? oppure non conosco bene rmi e quando c'e' connessione il client lavora con una copia del server che crea in locale all'atto della connessione... il file di policy che ho dovrebbe garantirmi tutti i diritti... che faccio? magari puoi indicarmi un altro metodo per mandare uno shutdown ad una macchina remota?
grazie! :sofico:
Ma shutdown non può darlo solo root?
Ma scusa come può crearsi in locale una copia del server? E tutti i vantaggi della velocità di un server dedicato dove stanno? RemoteMethodInvocation significa che i metodi "girano" sulla macchina remota (e meno male).
per il problema di leggere i multi_sz e' risolto! ti adoro!!!! quasi quasi slinguazzerei con te! :sofico: :sofico: :sofico: :sofico:
p.s. per lo shutdown consigli??
Originariamente inviato da cn73
Ma shutdown non può darlo solo root?
Ma scusa come può crearsi in locale una copia del server? E tutti i vantaggi della velocità di un server dedicato dove stanno? RemoteMethodInvocation significa che i metodi "girano" sulla macchina remota (e meno male).
in che senso solo root?? non esiste quindi un modo per far riavviare un pc remoto con rmi??
No scusa ho detto una cavolata...sicuramente è una questione di permessi, devo dirti la verità, non mi sono mai posto il problema di spegnere un server da client :D :eek:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.