1

Während der Installation von Setup.exe, wenn ein bestimmter Schlüssel in der Registrierung vorhanden ist, möchte ich die Installation abbrechen.Um dies zu erreichen, rufe ich install-script-Funktion mit benutzerdefinierten Aktion in Install Shield Projekt. Install Script-Code ist:Brechen Sie die Install Shield-Installation ab, wenn ein bestimmter Schlüssel in der Registrierung vorhanden ist

function MyFunction(hMSI) 
    // To Do: Declare local variables. 
    STRING szKey; 
    NUMBER nRootKey; 

begin 
// Set the root key to HKEY_LOCAL_MACHINE. 
    nRootKey = HKEY_LOCAL_MACHINE; 

    if (RegDBSetDefaultRoot (nRootKey) < 0) then 
     MessageBox ("First call to RegDBSetDefaultRoot failed.", SEVERE); 
    else 
     MessageBox ("Root key successfully set to HKEY_LOCAL_MACHINE.", 
        INFORMATION); 
    endif; 

szKey = "SOFTWARE\\Test"; 

if (RegDBKeyExist (szKey)< 0) then 
MessageBox ("Test is not present", SEVERE); 
abort; 
endif; 

if (RegDBKeyExist (szKey)= 1) then 
MessageBox ("Test is present", SEVERE); 
abort; 
endif; 

    // To Do: Write script that will be executed when MyFunction is called. 

end; 

Jedes Mal, wenn ich Nachricht bin immer "Test nicht vorhanden ist", obwohl Schlüssel "HKEY_LOCAL_MACHINE \ SOFTWARE \ Test" in der Registrierung vorhanden ist.

Ich glaube, ich habe etwas falsch gemacht im Skript oder etwas fehlt. Bitte helfen Sie dabei.

Geworben Link: http://helpnet.installshield.com/installshield19helplib/Subsystems/installshield19langref/helplibrary/LangrefRegDBKeyExist_example.htm#Langref_appendixD_3271668955_1023535

https://community.flexerasoftware.com/showthread.php?139026-Check-if-a-registry-key-exists

+1

Ich weiß, dass jemand bereits eine Antwort geliefert hat, aber die Funktionalität, die Sie versuchen Dies kann nativ mit den Tabellen RegLocator und LaunchCondition erreicht werden. RegLocator kann eine Eigenschaft auffüllen, wenn der Schlüssel existiert. LaunchCondition kann die Installation fehlschlagen, wenn diese Eigenschaft vorhanden ist. –

Antwort

2

Es ist nicht 100% in Ihrer Frage bestätigt, aber ich würde starke Chancen geben, dass:

  1. Sie testen auf einer 64-Bit-Installation von Windows,
  2. Sie erstellen und überprüfen visuell den Registrierungsschlüssel mit C: \ Windows \ System32 \ Regedt32.exe oder gleichwertig und
  3. Ihnen ist nicht bekannt, dass die InstallScript-Engine als 32-Bit-Prozess ausgeführt wird oder sich der Auswirkungen nicht bewusst ist.

Wenn das alles wahr ist, ist das Problem, dass Sie den Schlüssel HKEY_LOCAL_MACHINE \ SOFTWARE \ Test erstellt haben, aber Ihr Code überprüft HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Test statt, aufgrund der registry redirector. Um dies zu beheben, sollten Sie eine der folgenden Aktionen ausführen:

  • -Test ein Schlüssel in der 32-Bit-Ansicht (zB Einführung C: \ Windows \ SysWow64 \ regedt32.exe); Auf diese Weise können Sie den Namen HKEY_LOCAL_MACHINE \ SOFTWARE \ Test als umgeleiteten Speicherort verwenden.
  • Ändern Sie Ihren Code, um eine 64-Bit-Sicht auf die Registrierung anzufordern, indem Sie REGDB_OPTIONS lokal ändern, um REGDB_OPTION_WOW64_64KEY einzuschließen. Während dieses Flag angegeben ist, werden die InstallScript-Registrierungsfunktionen nicht umgeleitet. Vergessen Sie nicht, REGDB_OPTIONS auf den vorherigen Wert zurückzusetzen.
  • Wenn das Projekt MSI-basierte, betrachten System sucht mit und 19 „Fehler“ benutzerdefinierte Aktionen geben stattdessen

Beachten Sie, dass, wenn dieser Schlüssel durch Software außerhalb Ihrer Kontrolle erstellt wird, können Sie sicherstellen, dass müssen Sie suchen nach dem richtigen Ort. Dies beeinflusst, ob das erste oder zweite Geschoss eine bessere Wahl für Ihre Situation ist. (Wenn der Schlüssel vollständig unter Ihrer Kontrolle ist, sollten Sie auch darüber nachdenken, ob er den richtigen Standort verwendet, und ändern, falls nicht.)

+0

Dank Michael .. Sie sind absolut richtig ... Die Dinge haben Arbeit mit REGDB_OPTIONS..Many Dinge wurde wegen so guter Erklärung gelöscht –

Verwandte Themen