Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 31

Inno Setup - Mehrfache Registry Abfrage

  1. #1 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Hey ihr da draußen,

    ich erstelle mit Inno Setup Installationsroutinen welche Dateien ersetzt/austauscht und frage dazu via Code-Eintrag den Installationspfad von dem Program ab.

    Code:
    (CODE)
    procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
    
    procedure InitializeWizard();
    begin
      ExtractTemporaryFile('Splash.png');
      ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}\Splash.png'),1000,1500,1000,0,255,True,$FFFFFF,10);
    end;
    
    function GetRegistryPath(DefaultPath: string): string;
    begin
        if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GOG.com\Games\1438074791', 'PATH', Result) then Result := ExpandConstant(DefaultPath);
    end;
    Code:
    [Setup]
    DefaultDirName={code:GetRegistryPath|{pf}\Ubisoft\Related Designs\Anno 1503 AD}
    Nun kann es aber mal sein, dass Person A z.B. die gog.com Version von Anno 1503 hat aber Person B die Retail-Version (welche dann andere Einträge besitzt als die gog.com-Variante). Ist es nun möglich per Inno Setup nach beiden Einträgen zu suchen und falls Eintrag A nicht besteht auf Eintrag B und umgekehrt zurückzugreifen?


    Vielen Dank schon einmal im voraus.
    pcblizzard ist offline

  2. #2 Zitieren
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
    Würde es funktionieren mit einer einfachen if? Wenn ich mich recht an Inno erinnere, müsste das ungefähr so aussehen:

    Code:
    function GetRegistryPath(DefaultPath: string): string;
    begin
        if (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GOG.com\Games\1438074791', 'PATH', Result)) or ({Zweiter Schlüssel}) then Result := ExpandConstant(DefaultPath);
    end;
    Dada ist offline

  3. #3 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Code:
    function GetRegistryPath(DefaultPath: string): string;
    begin
        if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GOG.com\Games\1438074791', 'PATH', Result) or (HKEY_LOCAL_MACHINE, 'SOFTWARE\Max-Design\ANNO1503', 'GAMEPATH', Result) then Result := ExpandConstant(DefaultPath);
    end;
    Habe es mal probiert aber da schmeißt er mir ein Fehler raus

    "Line: 20
    Column: 123:
    Close round expected"

    Grundsätzlich verstehe ich den Fehler aber mache ich die "Klammer zu" da hin gibt er mir den nächsten Fehler aus:

    "Line: 20
    Column: 136:
    Type mismatch"

    Und ich weiß, dass ich wahrscheinlich etwas nicht richtig umgesetzt habe.


    EDIT: Ich mal mal der einfachheitshalber das Script hochgeladen: https://drive.google.com/open?id=0B5...XNWNWN5RTJIcDA
    pcblizzard ist offline Geändert von pcblizzard (19.05.2017 um 16:34 Uhr)

  4. #4 Zitieren
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
    Ich garantiere für nichts, ist ewig lang her, dass ich Inno Scripts geschrieben habe^^
    Versuchs mal so:

    Code:
    if (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GOG.com\Games\1438074791', 'PATH', Result)) or (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Max-Design\ANNO1503'), 'GAMEPATH', Result) then Result := ExpandConstant(DefaultPath);
    Dada ist offline

  5. #5 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Dann kommt der Fehler

    "Line: 20
    Column: 174:
    Invalid numbers of parameters"

    Code:
    if (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GOG.com\Games\1438074791', 'PATH', Result)) or (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Max-Design\ANNO1503'), 'GAMEPATH', Result) then Result := ExpandConstant(DefaultPath);
    Die rot markierte Klammer ist, in dem Fall, das Problemchen

    Macht es eigentlich einen Unterschied ob ich die "Non-Unicode"-Version von Inno Setup benutze?

    EDIT: Nope, auch die "Unicode"-Version spuckt den gleichen Fehler aus
    pcblizzard ist offline

  6. #6 Zitieren
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
    Und wenn du die Klammern angleichst? Sorry, hab ich auch grade erst gesehen

    Code:
    if (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GOG.com\Games\1438074791', 'PATH', Result)) or (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Max-Design\ANNO1503', 'GAMEPATH', Result))
    Dada ist offline

  7. #7 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Grundsätzlich kommen wir dem Problem auf die Schliche. Jetzt kompiliert er zwar ignoriert aber den zweiten Registryeintrag von "Max-Design" (also zeig dann den Pfad "{pf}\ANNO 1503 Königs- Edition" an und nicht wo ich es wirklich hin installiert hatte ({pf}\ANNO 1503 Königs- Edition_TEST) , bei der gog.com-Version findet er den Pfad.

    Gibt es denn noch eine andere Möglichkeit unterschiedliche Pfade zu finden (Suchen der "*.exe" eventuell)
    pcblizzard ist offline Geändert von pcblizzard (19.05.2017 um 17:25 Uhr)

  8. #8 Zitieren
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
    Ich bin jetzt ehrlich gesagt raus, versuche aber mal Grundlagenforschung zu betreiben.
    Welche Registry-Einträge sind denn vorhanden? Nicht, dass du vielleicht eine alte Installation hattest, wovon noch Schlüssel übrig geblieben sind.
    Dada ist offline

  9. #9 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Habe die Schlüssel extra vorher gelöscht, daher kann es nicht an denen liegen.

    Registry Eintrag der gog.com-Version:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com]
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games]
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games\1438074791]
    "PATH"="D:\\GOG Galaxy\\Games\\Anno 1503 AD"
    "GAMENAME"="Anno 1503 A.D."
    "STARTMENULINK"="C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Anno 1503 AD [GOG.com]\\Anno 1503 AD"
    "GOGGAMEDLL"="goggame-1438074791.dll"
    "GUID"="{8a9c60a4-ff32-4609-bc8f-023e8e0d7794}"
    "BUILD"="5"
    "STARTMENU"="Anno 1503 AD"
    "gameID"="1438074791"
    "uninstallCommand"="D:\\GOG Galaxy\\Games\\Anno 1503 AD\\unins000.exe"
    "DEPENDSON"=""
    "DLC"=""
    "INSTALLDATE"="2017-05-19 23:08:01"
    "VER"="2.0.0.5"
    "SUPPORTLINK"="anno_1503_ad"
    "LANGUAGE"="english"
    "SAVEGAMEFOLDER"="D:\\GOG Galaxy\\Games\\Anno 1503 AD\\"
    "LAUNCHPARAM"=""
    "LAUNCHCOMMAND"="D:\\GOG Galaxy\\Games\\Anno 1503 AD\\1503Startup.exe "
    "EXE"="D:\\GOG Galaxy\\Games\\Anno 1503 AD\\1503Startup.exe"
    "EXEFILE"="1503Startup.exe"
    "WORKINGDIR"="D:\\GOG Galaxy\\Games\\Anno 1503 AD\\"


    Registry Eintrag der Retail-Version:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Max-Design]
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Max-Design\ANNO1503]
    "GAMEPATH"="C:\\Programme\\ANNO 1503 Königs- Edition"
    "VERSION"="3.05.042.00"
    "ADDON_VERSION"="3.00.043.00"
    "KE_VERSION"="3.00.043.00"
    "LANGUAGE"="GER"


    Ich Danke schon mal für die Arbeit die Du hiermit hast!
    pcblizzard ist offline

  10. #10 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.200
    Für die Königs-Edition gibt es laut hier noch einen anderen Eintrag, nämlich
    Code:
    HKEY_LOCAL_MACHINE\SOFTWARE\Sunflowers\ANNO 1503 Königs- Edition
    Vielleicht ist da das richtige Verzeichnis mit _TEST zu finden?
    1 2 3 4 5
    Blue Force ist offline

  11. #11 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Den habe ich auch gefunden aber auch nach Start des Spiels und umstellen von Optionen bleibt der Eintrag leer.
    pcblizzard ist offline

  12. #12 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.200
    Zitat Zitat von pcblizzard Beitrag anzeigen
    Den habe ich auch gefunden aber auch nach Start des Spiels und umstellen von Optionen bleibt der Eintrag leer.
    Geh doch mal im Registry-Editor auf HKEY_LOCAL_MACHINE\SOFTWARE, dann Strg-F und nach Edition_TEST suchen.
    Dann weiss man zumindest ob irgendwo anders der richtige Pfad angegeben ist.
    1 2 3 4 5
    Blue Force ist offline

  13. #13 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Das sind die einzigen die er gefunden hat:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Max-Design\ANNO1503]
    "GAMEPATH"="C:\\Programme\\ANNO 1503 Königs- Edition_TEST"
    "VERSION"="3.05.042.00"
    "ADDON_VERSION"="3.00.043.00"
    "KE_VERSION"="3.00.043.00"
    "LANGUAGE"="GER"
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\1503.exe]
    "Path"="C:\\Programme\\ANNO 1503 Königs- Edition_TEST"
    @="C:\\Programme\\ANNO 1503 Königs- Edition_TEST\\1503.exe"
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DB833EF9-A198-49BE-970A-BD46F30BFBB4}]
    "UninstallString"="RunDll32 C:\\PROGRA~1\\GEMEIN~1\\INSTAL~1\\PROFES~1\\RunTime\\0701\\Intel32\\Ctor.dll,LaunchSetup \"C:\\Programme\\InstallShield Installation Information\\{DB833EF9-A198-49BE-970A-BD46F30BFBB4}\\setup.exe\" -l0x7 "
    "DisplayName"="ANNO 1503 Königs- Edition"
    "LogFile"="C:\\Programme\\InstallShield Installation Information\\{DB833EF9-A198-49BE-970A-BD46F30BFBB4}\\setup.ilg"
    "ProductGuid"="{DB833EF9-A198-49BE-970A-BD46F30BFBB4}"
    "InstallLocation"="C:\\Programme\\ANNO 1503 Königs- Edition_TEST"
    "DisplayVersion"="3.05.042.00"
    "Version"=dword:0305002a
    "MajorVersion"=dword:00000003
    "MinorVersion"=dword:00000005
    "LogMode"=dword:00000001
    pcblizzard ist offline Geändert von pcblizzard (19.05.2017 um 22:57 Uhr)

  14. #14 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.200
    Zitat Zitat von pcblizzard Beitrag anzeigen
    Das sind die einzigen die er gefunden hat:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Max-Design\ANNO1503]
    "GAMEPATH"="C:\\Programme\\ANNO 1503 Königs- Edition_TEST"
    "VERSION"="3.05.042.00"
    "ADDON_VERSION"="3.00.043.00"
    "KE_VERSION"="3.00.043.00"
    "LANGUAGE"="GER"
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\1503.exe]
    "Path"="C:\\Programme\\ANNO 1503 Königs- Edition_TEST"
    @="C:\\Programme\\ANNO 1503 Königs- Edition_TEST\\1503.exe"
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DB833EF9-A198-49BE-970A-BD46F30BFBB4}]
    "UninstallString"="RunDll32 C:\\PROGRA~1\\GEMEIN~1\\INSTAL~1\\PROFES~1\\RunTime\\0701\\Intel32\\Ctor.dll,LaunchSetup \"C:\\Programme\\InstallShield Installation Information\\{DB833EF9-A198-49BE-970A-BD46F30BFBB4}\\setup.exe\" -l0x7 "
    "DisplayName"="ANNO 1503 Königs- Edition"
    "LogFile"="C:\\Programme\\InstallShield Installation Information\\{DB833EF9-A198-49BE-970A-BD46F30BFBB4}\\setup.ilg"
    "ProductGuid"="{DB833EF9-A198-49BE-970A-BD46F30BFBB4}"
    "InstallLocation"="C:\\Programme\\ANNO 1503 Königs- Edition_TEST"
    "DisplayVersion"="3.05.042.00"
    "Version"=dword:0305002a
    "MajorVersion"=dword:00000003
    "MinorVersion"=dword:00000005
    "LogMode"=dword:00000001
    Seltsam, der richtige Eintrag ist an sich da.
    Da weiß ich auch nicht weiter.

    Vage Vermutung: Der Underscore macht Probleme, vielleicht testweise ihn in deer Registry löschen und probieren ob es dann geht.
    1 2 3 4 5
    Blue Force ist offline

  15. #15 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Den Underscore? Da musst Du mir jetzt mal erklären was des ist. -.-
    pcblizzard ist offline

  16. #16 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.200
    Zitat Zitat von pcblizzard Beitrag anzeigen
    Den Underscore? Da musst Du mir jetzt mal erklären was des ist. -.-
    Der Unterstrich vor TEST bei ANNO 1503 Königs- Edition_TEST
    Habe ich nur vermutet weil der Installer bis dahin ja anscheinend richtig liest.
    1 2 3 4 5
    Blue Force ist offline

  17. #17 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Achso ja, dachte irgendwas an der Registry -.-

    Hat leider nichts geändert. Selbst wenn ich den installierten Anno-Ordner statt "ANNO 1503 Königs- Edition" "Humbumbum" nenne, gibt er mir den Standardpfad raus den ich unter "DefaultDirName eingetragen habe
    Code:
    DefaultDirName={code:GetRegistryPath|{pf}\ANNO 1503 Königs- Edition}
    Wobei er das ja eigentlich soll, nur soll er auch vorher beide Registry Einträge auf Verfügbarkeit checken und wenn entweder der gog.com oder der Eintrag von der Retail-Version vorhanden sind, eben den benutzen.
    pcblizzard ist offline

  18. #18 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.200
    Ich glaube der Ausdruck ist das Problem. Sobald in der Registry ein Pfad gefunden wird, ist die gesamte Bedingung "TRUE", also das Result wird dann immer auf DefaultPath gesetzt.
    Was ist, wenn du dem ganzen Ausdruck ein not davorsetzt?

    Ein weiteres Problem kann sein, daß in der Bedingung die Variable "Result" durch den 2maligen Aufruf von "RegQueryStringValue" praktisch zweimal gleichzeitig neu beschrieben wird. Deshalb solltest du versuchen die Abfrage für GOG und Maxdesign in einzelne Zeilen unterzubringen.
    1 2 3 4 5
    Blue Force ist offline

  19. #19 Zitieren
    Lehrling Avatar von pcblizzard
    Registriert seit
    Mar 2007
    Ort
    München
    Beiträge
    22
    Code:
    [Code[
    function GetRegistryPath(DefaultPath: string): string;
    begin
        if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GOG.com\Games\1438074791', 'PATH', Result) then Result := ExpandConstant(DefaultPath);
        if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Max-Design\ANNO1503', 'GAMEPATH', Result) then Result := ExpandConstant(DefaultPath);
    end;
    Habe ihn mal "aufgeteilt". Das lustige daran ist jetzt, er findet den Pfad der Retail-Version aber dann nicht den der gog.com (vorher war es ja umgedreht )

    Ohne dem "not" (also nur "if") ignoriert er den Befehl, dass er die Registry überprüfen soll, komplett und gibt bei beiden Versionen direkt den Standardpfad aus (auch wenn ich bei einem Eintrag "if not" und beim anderen nur "if" habe - kommt das gleiche Ergebnis raus).
    pcblizzard ist offline

  20. #20 Zitieren
    Retro Micky Avatar von Blue Force
    Registriert seit
    May 2009
    Beiträge
    26.200
    Wie sieht es damit aus?
    Code:
    found1 := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GOG.com\Games\1438074791', 'PATH', Result1);
    found2 := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Max-Design\ANNO1503', 'GAMEPATH', Result2);
    
    Result := ExpandConstant(DefaultPath);
    if (found1) then Result := Result1;
    if (found2) then Result := Result2;
    1 2 3 4 5
    Blue Force ist offline

Seite 1 von 2 12 Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •