View Single Post
  #9  
Old 02-06-2017, 19:33
Cesar82's Avatar
Cesar82 Cesar82 is offline
Registered User
 
Join Date: May 2011
Location: Brazil
Posts: 1,074
Thanks: 1,814
Thanked 2,304 Times in 787 Posts
Cesar82 is on a distinguished road
Error fix

Quote:
Originally Posted by gatosky1620 View Post
Im creating my own Assassin creed 3 v1.06 conversion, but i have this problem when add the registry.iss file.

Possible Solution. Work for me...

insert this line in script
Code:
#define FileLine StringChange(FileLine, "'", "''")
in this code part...
Code:
#sub DeleteRegistryValue
  #if Pos("Root:",FileLine) > 0 & Pos("SubKey:",FileLine) > 0 & Pos("ValueName:",FileLine) > 0
    #define FileLine StringChange(FileLine, ": ", ":")
    #define FileLine StringChange(FileLine, "; ", ";")
    #define FileLine StringChange(FileLine, """", "")
    #define FileLine StringChange(FileLine, "'", "''")
    #define RootKey Copy(FileLine, Pos("Root:",FileLine) + 5, Len(FileLine))
This function contain error, and if insert a key and not value not remove from registry. In Registry.iss from Arsassin's Creed 3 the first eight lines not remove from windows registry on uninstall game (Firsts Lines: Assassin's Creed(R) III not contain value.. only root and key).

To fix error undelet keys from registry replace original "sub DeleteRegistryValue" for this part in script
Code:
#sub DeleteRegistryValue
  #if Pos("Root:", FileLine) > 0 & Pos("SubKey:", FileLine) > 0
    #define FileLine StringChange(FileLine, ": ", ":")
    #define FileLine StringChange(FileLine, "; ", ";")
    #define FileLine StringChange(FileLine, """", "")
    #define FileLine StringChange(FileLine, "'", "''")
    #define RootKey Copy(FileLine, Pos("Root:",FileLine) + 5, Len(FileLine))
    #define RootKey Copy(RootKey, 0, Pos(";",RootKey)-1)
    #define SubKeyName Copy(FileLine, Pos("SubKey:",FileLine) + 7, Len(FileLine))
    #define SubKeyName Copy(SubKeyName, 0, Pos(";",SubKeyName)-1)
    #if Pos("ValueName:", FileLine) > 0
      #define ValueName Copy(FileLine, Pos("ValueName:",FileLine) + 10, Len(FileLine))
      #define ValueName Copy(ValueName, 0, Pos(";",ValueName)-1)
    #else
      #define ValueName ""
    #endif
    if not (not IsWin64 and (Pos('64', '{#RootKey}') > 0)) then begin
      RegDeleteValue({#RootKey}, '{#SubKeyName}', '{#ValueName}');
      CurrentRegKey := '{#SubKeyName}' + '\' + '{#ValueName}';
      repeat
        CurrentRegKey := ExtractFilePath(CurrentRegKey);
        SetLength(CurrentRegKey, Length(CurrentRegKey) - 1);
        RegDeleteKeyIfEmpty({#RootKey},CurrentRegKey);
      until RegKeyExists({#RootKey},CurrentRegKey);
    end;

  #endif
#endsub
Reply With Quote