Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Suchen in der Registry


2 replies to this topic

bergermi

bergermi
  • Members
  • 34 posts

Posted 15 July 2003 - 06:50

Problemstellung:
Alle Rechner haben unterschiedliche Versionen von TCL/TK installiert diese Versionen sind durch die aktuelle Version AktiveTCL zu ersetzen.
Die Versionen stehen mit Tcl/Tk 8.0, Tcl/Tk 8.1, ...... in der Registry

Ansatz:
Suche im Uninstallbereich der Registry nach TCL/TK und nach dem UninstallString und deinstalliere .

Versuch 1 :
Mit Wildcard den String \\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Tcl% oder * zu finden
--> misslungen
Versuch 2:
Mit Liste ListFindString -> doch auch hier ist es offensichtlich nicht möglich mit Wildcard zu suchen javascript:emoticon(':(')


Gibt es eine Möglichkeit wie man das macht ?

Danke Michi

Perotin

Perotin
  • Full Members
  • 407 posts

Posted 15 July 2003 - 10:35

Wie wäre es mit RegDBQueryKey?

Nimm den Uninstall-Key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall und erstelle ein Liste der Schlüssel darin.
Dann laß Dir diese in einer Schleife geben und such darin nach etwas Tcl-spezifischen oder prüf den String des Keys auf "tcl" als Substring darin ...
Auf diese weise kannst Du den gesamten Ast der Registry abarbeiten und evtl auch mehrere Tcl/Tk-Installationen finden und deren Deinstallation starten.

Viel Erfolg!
Gruß / regards
Thomas

bergermi

bergermi
  • Members
  • 34 posts

Posted 15 July 2003 - 14:06

Das war der entscheidende Hint !

Hab das jetzt so gelöst:

function OnAppSearch()

STRING szKey, szName, szSubKey, szSubKey1, szNumName, svValue, svResult, szDelimiterSet, svSring;
STRING svPath , svFile, svString, svUninstall, svUninstallPath, svProgram, svCommand, szProg;
NUMBER nvSize, nResult, nResult2, nReturn1, nItem, nReturn, nvType, nvAktivTCL, nvTCL;
#define KEY "\\ActiveTclScript\\shell\\open\\command";
#define KEY1 "\\TclScript\\shell\\open\\command"
LIST listID, listUninstProg, listUninstall ;
begin
listID = ListCreate ( STRINGLIST );
szSubKey = KEY;
szSubKey1 = KEY1;

if (RegDBKeyExist(szSubKey) = 1) then
RegDBGetKeyValueEx(szSubKey, szNumName, nvType, svValue , nvSize);
szDelimiterSet = " \"";
StrGetTokens(listID, svValue, szDelimiterSet);
ListGetFirstString (listID, svString);
ParsePath ( svPath , svString , PATH );
ParsePath ( svFile , svString , FILENAME );
if (FindFile ( svPath , svFile , svResult ) =0) then
nvAktivTCL = 1;
else
// Registry Leiche
nvAktivTCL = 0;
endif;
ListDestroy ( listID );
endif;

if (RegDBKeyExist(szSubKey1) = 1) then
// Schau ma mal nach dem alten TCL.
RegDBGetKeyValueEx(szSubKey1, szNumName, nvType, svValue , nvSize);
szDelimiterSet = " \"";
StrGetTokens(listID, svValue, szDelimiterSet);
ListGetFirstString (listID, svString);
ParsePath ( svPath , svString , PATH );
ParsePath ( svFile , svString , FILENAME );
ListDestroy ( listID );
if (FindFile ( svPath , svFile , svResult ) =0) then
// Altes Tcl Deinstallieren
listUninstall = ListCreate (STRINGLIST);
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
svUninstall = "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
nItem = REGDB_KEYS;
nReturn = RegDBQueryKey(svUninstall, nItem, listUninstall);
nResult2 = ListGetFirstString(listUninstall, szProg);
while (nResult2 = 0)
// Abfrage des Unterschlüssels
if (szProg % "Tcl/Tk") then
nvType = REGDB_STRING_EXPAND;
szKey = svUninstall +"\\"+szProg;
szNumName = "UninstallString";
RegDBGetKeyValueEx(szKey, szNumName, nvType, svUninstallPath, nvSize);
szDelimiterSet = " ";
listUninstProg = ListCreate (STRINGLIST);
StrGetTokens(listUninstProg, svUninstallPath, szDelimiterSet);
ListGetFirstString(listUninstProg, svProgram);
ListGetNextString(listUninstProg, svCommand);
LaunchAppAndWait ( svProgram , svCommand , WAIT );

ListDestroy ( listUninstProg );

endif;
nResult2 = ListGetNextString (listUninstall, szProg);
endwhile;

endif;
ListDestroy ( listUninstall );







endif;