我是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
值,并且不会追加操作将会进行。
有人可以帮助我吗?
谢谢
答案 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?的答案更正为包含\
。