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 系统环境变量中。
我阅读了这些主题:
- How to set a global environment variable from Inno Setup installer?
- How do I modify the PATH environment variable when running an Inno Setup Installer?
我试着写了上面的代码。
请注意,我将 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? 的答案以包含 \
。
我是 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 系统环境变量中。 我阅读了这些主题:
- How to set a global environment variable from Inno Setup installer?
- How do I modify the PATH environment variable when running an Inno Setup Installer?
我试着写了上面的代码。
请注意,我将 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? 的答案以包含 \
。