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;