我正在尝试使用此函数来在运行时翻译{app}variables。 它适用于Windows 2008(64位),但不适用于Windows 7(64位)。
这是我使用的代码:
[Registry] Root: HKLM; Subkey: "SYstemCurrentControlSetControlSession ManagerEnvironment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}"; Check: ExpandConstant(NeedsAddpath('{app}')) function NeedsAddpath(Param: string): boolean; var OrigPath: string; begin if not RegQueryStringValue(HKEY_LOCAL_MACHINE,'SYstemCurrentControlSetControlSession ManagerEnvironment','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(';' + UpperCase(Param) + ';',';' + UpperCase(OrigPath) + ';') = 0; if Result = True then Result := Pos(';' + UpperCase(Param) + ';',';' + UpperCase(OrigPath) + ';') = 0; end;
你知道原因吗?
谢谢!
避免Inno安装程序中的“无法展开shell文件夹常量userdocs”错误
如何在没有在Inno Setup中打开新窗口的情况下运行CMD命令
如何使用inno-setup进行检查,如果一个进程在Windows 2008 R2 64位上运行?
Inno Setup:控制面板图标不显示
recursionsearchregistry
Inno – 防止registry键被redirect到Wow6432Node
检查Inno安装程序中是否存在快捷方式
为什么我的Delphi 6程序仅在less数Windows 7系统(InnoSetup)上安装时触发pipe理权限请求?
从虚拟化Windowsregistry中读取密钥
确定Inno Setup中的Windows版本
您的代码在任何操作系统上都无法正常工作,因为您的操作顺序错误。 (如果你认为它在Win2008上工作,这只是意味着你没有测试你的想法,或者错误地解释了结果。)
Check: ExpandConstant(NeedsAddpath('{app}'))
您正在扩展NeedsAppPath的结果,当NeedsAppPath的代码显然预期{app}在参数传入时已经被扩展。
将其更改为:
Check: NeedsAppPath(ExpandConstant('{app}'))
(事实上,上面的代码甚至不应该编译,因为Check函数需要返回布尔值,而ExpandConstant不会这么做,所以你显然不会测试你的想法。
类似下面的东西可能会更好,但是这并不能解释为什么原始版本不能工作。 有一件事是肯定的,原来的代码传递给Check参数字符串作为结果,而不是布尔值,基本上是错误的,但它不能解释为什么它在Windows 2008上工作:
[Setup] AppName=My Program AppVersion=1.5 DefaultDirName={pf}My Program #define KeyPath "SYstemCurrentControlSetControlSession ManagerEnvironment" [Registry] Root: HKLM; Subkey: "{#KeyPath}"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}"; Check: NeedsAddpath [Code] function NeedsAddpath: Boolean; var AppPath: string; OrigPath: string; begin Result := True; if RegQueryStringValue(HKEY_LOCAL_MACHINE,'{#KeyPath}',OrigPath) then begin AppPath := ExpandConstant('{app}'); Result := Pos(';' + UpperCase(AppPath) + ';',';' + UpperCase(OrigPath) + ';') = 0; if Result then Result := Pos(';' + UpperCase(AppPath) + ';',';' + UpperCase(OrigPath) + ';') = 0; end; end;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。