Artem_Butenko  Цитата:  ... Постараюсь еще детальнее описать суть проблемы... 
  если я правильно понял суть проблемы, то возможно стоит попробовать вот так:   
 [_Setup] 
 DefaultDirName={code:MyDirName}   
 [_Code] 
 var 
   IsSkipDirPage: boolean; // глобальная переменна. значение которой будет True, если страницу выбора директории нужно пропустить.   
 function MyDirName(S:String): String; 
 var 
     InsPath: String; // путь установки 
   er: boolean;     
   myFile:String; 
 begin 
   IsSkipDirPage := False; // по умолчание предполагаем, что страница выбора директории будет 
   InsPath:=ExpandConstant('{pf}\Моя компания\Мой продукт'); //если ключа и нужного файла  не найдем, то ставим какой-то путь по умолчаний     
   er := RegQueryStringValue(HKLM, '\мой ключ в реестре\', 'InstallPath', InsPath); 
   if er and InsPath<>'' then //если ключ существует и там что-то записано 
   begin 
     IsSkipDirPage:=True; // запомним, что станицу выбора директории нужно пропустить 
                         // будем ставить по старому пути , который сейчас в InsPath 
   end 
   else 
     begin 
       myFile := ExpandConstant('{src}\myfile.md5'); // тот файл шо должен лежать рядом с инсталятором 
       if (FileExists(myFile)) and (GetMD5OfFile(myFile)='нужное мне значени MD5') then 
       begin 
         IsSkipDirPage:=True; // запомним, что станицу выбора директории нужно пропустить 
         InsPath := ExpandConstant('{src}'); // будем ставить в ту же папку где находится инсталятор 
       end; 
     end; 
   Result := InsPath; 
 end;   
 procedure CurPageChanged(CurPageID: Integer); 
 begin 
   if (CurPageID=wpSelectDir) and IsSkipDirPage then //если страница выбора директории и ее нужно пропустить 
     WizardForm.NextButton.OnClick(WizardForm.NextButton); // пропустили -- типа нажали Next 
 end;