inno issue: невозможно выполнить файл, полученный из RegQueryStringValue

Вы можете использовать метод printf , например:

System.out.printf("%.2f", val);

Короче говоря, синтаксис %.2f говорит Java о возврате вашей переменной (val ) с 2 десятичными знаками (.2) в десятичном представлении числа с плавающей запятой (f) с начала спецификатора формата (%).

Существуют другие символы преобразования, которые вы может использовать кроме f:

  • d: десятичное целое
  • o: восьмеричное целое
  • e: с плавающей запятой в научной нотации

1
задан cnm 13 July 2018 в 14:57
поделиться

2 ответа

Ниже мое решение, в основном выполните xxxxx-runtime.exe в разделе [code], прежде чем получить путь от reg. Ниже приведен исходный код:

[Files]              
Source: ".\xxxxx-runtime.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall

[UninstallRun]
Filename: {code:GetUninstallString}; BeforeInstall: SetUninstallString; RunOnceId: {code:GetUninstallString}

[Code]
var
uninstallString: String;

function getUninstallString(p: String): String;
begin
  Result := uninstallString;
end;

// execute xxxxx-runtime.exe
procedure exe();
var
  iResultCode: Integer;
begin
  Exec(ExpandConstant('{tmp}\xxxxx-runtime.exe'), '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode);
end;

procedure SetUninstallString();
var
  sUnInstPath: String;
  sUnInstallString: String;
begin
  exe();
  sUnInstPath := ExpandConstant('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\xxxxx_is1');
  sUnInstallString := '';
  if not RegQueryStringValue(HKEY_LOCAL_MACHINE, sUnInstPath, 'UninstallString', sUnInstallString) then
    RegQueryStringValue(HKEY_CURRENT_USER, sUnInstPath, 'UninstallString', sUnInstallString);
  uninstallString := RemoveQuotes(sUnInstallString);
end;
0
ответ дан cnm 17 August 2018 в 12:33
поделиться

Как вы поняли, константа {code:} оценивается во время установки.

Поэтому вместо этого полностью реализуйте свой код в секции [Code], не используя секцию [UninstallRun].

[Code]

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall { or usUninstall } then
  begin
    { Use RegQueryStringValue and Exec here }
  end;
end;

Хотя вам нужно исправить свой код, который разрешает команду для деинсталлятора. Обратите внимание, что во всех существующих вопросах по этой теме UninstallString разделяется на программный путь и аргументы. Если программный путь завернут в двойные кавычки, это нужно удалить.

См. Выполнение UninstallString в Inno Setup .

0
ответ дан Martin Prikryl 17 August 2018 в 12:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: