Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Stealthmax

Новый участник


Сообщения: 46
Благодарности: 15

Профиль | Цитировать


Цитата Nordek:
Проверял, запускает удаление »
Не вопрос, по порядку. AppID я указываю, само собой это упрощает все действия. Но в данном примере, как я разобрался, две неточности, а именно:
Код: Выделить весь код
function UninstallMyApp(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then // если убираем эти аргументы, то диалог появляется, т.е. получается что изначально отрицаем существование ключа в реестре, а ОН ЕСТЬ))))
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
И теперь самое интересное, о чем я выше писал, но наверно никто не понял что же не так происходит с извлекаемой строкой реестра.
А происходит следующее: указываем RemoveQuotes, т.е. убираем кавычки, а строка в реестре выглядит так: "C:\Windows\Installer\SandboxieInstall64.exe" /remove, то в итоге при выполнении получаем такой вид: C:\Windows\Installer\SandboxieInstall64.exe" /, т.е. обрезает начало и конец, и получаем явную ошибку. Пробовал играться с добавлением недостающих символов в строке, но результат снова 0.
P.S. Все, решил вопрос снимается.
Код: Выделить весь код
Exec(ExpandConstant('{cmd}'), '/C ' + (Buff),'', SW_HIDE, ewWaitUntilTerminated, i);
Извлекаем параметр в интерпретатор командной строки, и получаем требуемый результат. Другого способа не нашел.

Последний раз редактировалось Stealthmax, 17-04-2014 в 21:53.


Отправлено: 21:12, 17-04-2014 | #455