Inno安装程序编译失败,“必需参数”根“未指定”。即使只有一个

时间:2016-02-12 16:08:43

标签: environment-variables inno-setup

我是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行的错误

  

未指定必需参数“Root”。

我认为Inno Setup期望代码中的Root关键字代码:

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

更确切地说,我认为Inno Setup需要类似Inno Setup - Setting Java Environment Variable的内容,但如果我使用该代码,PATH变量将设置为{pf}\pandocX64值,并且不会追加操作将会进行。

有人可以帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:2)

如果要将段条目分成多行以便于阅读,则必须在行尾添加\以转义换行符。一个好的做法也是缩小线条,使人类读者清楚。

[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?的答案更正为包含\