Inno Setup 编译失败,"Required parameter "Root“未指定。”即使有一个

Inno Setup compilation fails with "Required parameter "Root" not specified." even when there is one

我是 Inno Setup 的初学者。
我想创建一个安装程序,它复制两个 .exe 文件并将一个值附加到 PATH 环境变量。

特别是我必须复制两个可执行文件,名为 pandoc.exe 和 pandoc-citeproc.exe,我之前用 visual studio 开发人员提示更改它们没有内存问题大文件转换。

所以我用 Inno Setup 写了这个脚本:

[Setup]
AppName=My Program
AppVersion=1.16.0.2
DefaultDirName={pf}\pandocX64

[Files]
Source: "pandoc.exe"; DestDir: "{app}";
Source: "pandoc-citeproc.exe"; DestDir: "{app}";


[Setup]
; Tell Windows Explorer to reload the environment
ChangesEnvironment=yes

[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
ValueType: expandsz; ValueName: "PATH"; ValueData: "{olddata};{pf}\pandocX64";
Check: NeedsAddPath('{pf}\pandocX64')

[Code]
function NeedsAddPath(Param: string): boolean;
var
  OrigPath: string;
begin
  if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
    'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
    'Path', OrigPath)
  then begin
    Result := True;
    exit;
  end;
  // look for the path with leading and trailing semicolon
  // Pos() returns 0 if not found
  Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
end;

所以,如果我不使用更新PATH变量的部分代码,安装程序会复制C:\Program Files (x86)\pandocX64中的两个可执行文件,这是正确的。

但我还想将该目录附加到 PATH 系统环境变量中。 我阅读了这些主题:

我试着写了上面的代码。

请注意,我将 PATH 设为 ValueName,并将 {olddata};{pf}\pandocX64 设为 ValueData 以附加到当前 PATH 值的可执行文件所在的目录文件被复制。

如果我尝试 运行 此代码,第 17 行会显示错误

Required parameter "Root" not specified.

我认为 Inno Setup 需要代码行中的 Root 关键字:

ValueType: expandsz; ValueName: "PATH"; ValueData: "{olddata};{pf}\pandocX64";

更准确地说,我认为 Inno Setup 需要类似 Inno Setup - Setting Java Environment Variable 的东西,但如果我使用该代码,PATH 变量将被设置为 {pf}\pandocX64 值,并且没有将执行追加操作。

有人可以帮助我吗?

谢谢

当您想将节条目分成多行以提高可读性时,您必须在行尾添加 \ 以转义换行符。一个好的做法是缩进行,使人清楚 reader.

[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
    ValueType: expandsz; ValueName: "PATH"; ValueData: "{olddata};{pf}\pandocX64"; \
    Check: NeedsAddPath('{pf}\pandocX64')

否则 Inno Setup 编译器会将每一行视为一个单独的条目,因此是一个不完整的条目。


我已更正 How do I modify the PATH environment variable when running an Inno Setup Installer? 的答案以包含 \