| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Mit wshshell in Registry schreiben (3165 mal gelesen)
|
Tobsen Mitglied IT -Systemkaufmann
  
 Beiträge: 557 Registriert: 14.06.2002
|
erstellt am: 10. Mai. 2007 09:49 <-- editieren / zitieren --> Unities abgeben:         
Hallöle, ich möchte mit einem vbs-Script Daten in die Registry schreiben. Eigentlich klappt das auch, aber, wenn ich im Namen einen Pfad mit Backslash stehen habe, erkennt er diesen nicht. Ein Beispiel:
Code:
Set wshshell = CreateObject("WScript.Shell") key = "HKCU\Software\Autodesk\Inventor\RegistryVersion11.0\System\Preferences\File\" Name = "P:Programme\Autodesk\Inventor 11\Bin\Inventor.exe:TemplateDir" Wert = "P:\programme\autodesk\inventor 11\Templates" wshshell.RegWrite key & Name, Wert
So wie ich das geschrieben habe, kann es IMHO auch nicht funktionieren, da er durch das & key und Name zusammen setzt und nur den letzten Wert "Inventor.exe:TemplateDir" als Name einträgt. Aber ein "," anstatt des "&" nimmt er nicht an. Warum? Kann ich über diese Methode überhaupt einen Namen als Zeichenfolge erstellen? MSDN sagt: Zitat: RegWrite will write at most one DWORD to a REG_BINARY value. Larger values are not supported with this method.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/678e6992-ddc4-4333-a78c-6415c9ebcc77.asp Was mache ich falsch?
Grüße Tobi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx

 Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 10. Mai. 2007 10:47 <-- editieren / zitieren --> Unities abgeben:          Nur für Tobsen
1) Versuch mal HKCU auszuschreiben, da hatte ich auch schon Probleme. 2) Es muss der komplette Pfad einzeln angelegt werden, d.h. die Struktur wird nicht automatisch generiert Ansonsten bin ich darauf umgestiegen regfiles zu generieren und diese einzulesen, ist IMHO einfacher und sicherer: WshShell.Run "Regedit.exe /s " & Source_dir & "regfile.reg", 1, true Leg den key an, schreib ihn raus, dann hast Du die ganze Struktur und Du kannst Dir da dann auch Templates aufbauen und diese vor dem Ausführen ändern, sowas in der Art: Code:
set objFile = fso.OpenTextFile(Source_dir & "test.reg", ForReading) strText = objFile.ReadAll objFile.ClosestrText = replace(strText, "@PFAD@", Source_Path) set objFile = fso.OpenTextFile(Temp_Path & "\test.reg", ForWriting, true) objFile.WriteLine strText objFile.Close
Mit dem Löschen ist es dann auch so eine Sache da ist ein regfile auch einfacher: Code:
DeleteKey "HKEY_CLASSES_ROOT\test"sub DeleteKey (key) ' Erzeugt eine temporäre Reg-Datei mit Informationen zum ' Löschen des Schlüssels, importiert diese über die Run- ' Methode und löscht die temporäre Datei wieder. const tmpFolder = 2 ' Temp-Ordner des Systems const ForWriting = 2 ' Schreiben dim oFso, oFile dim tmp, path set WshShell = createObject ("WScript.Shell") ' FileSystemObject-Objekt erzeugen set oFso = createObject("Scripting.FileSystemObject") tmp = oFso.GetTempName ' Temporären Dateinamen anfordern path = oFso.GetSpecialFolder(tmpFolder) ' Pfad holen tmp = path & "\" & tmp ' erzeuge Pfad + Temp-Dateiname ' öffne Datei zum Schreiben set oFile = oFso.OpenTextFile(tmp, ForWriting, true) ' Schreibe Datei oFile.WriteLine ("REGEDIT4") oFile.WriteLine ("") oFile.WriteLine ("[-" & key & "]") oFile.WriteLine ("@=""""") oFile.Close ' Datei schließen set oFile = nothing ' Objekt freigeben ' Reg-Datei importieren WshShell.Run "Regedit.exe /s " & tmp, 1, true oFso.DeleteFile tmp ' und löschen end sub
So kannst Du auch komplette Strukturen löschen. Aber Du weisst ja: Direkte Registry Funktionen können Dein System unbrauchbar machen , vorallem wenn Du Strukturen löschst. Axel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |