【问题标题】:Getting a file version number in the [Registry] section在 [Registry] 部分获取文件版本号
【发布时间】:2011-10-05 21:13:46
【问题描述】:

我正在使用 inno setup 为 Visual Studio 项目创建安装程序。我收到一个错误

"Parameter ValueData has invalid value"

对于此代码:

[Code]
function GetVersion(AppVersion: String): String;
var
  Version: String;
  CharIndex: integer;
  c: char;
begin  
for CharIndex := 1 to Length(AppVersion) do begin
    c := AppVersion[CharIndex];
    if (c <> '.') then
    Version := Version + c;
end;
Result := Version;
end;

[Registry]
Root: HKCU; Subkey: "MyCompany\Product"; ValueType: DWORD ; ValueName: "Version" ;     ValueData: GetVersion({#MyAppVersion}); Flags: uninsdeletekey;

我有这样的版本控制“1.0.0.3、1.0.0.4 等”。所以这个程序删除了 .并将它们全部连接成一个数字,并应传回写入注册表。因此,我可以检查此注册表值并卸载或更新以前的版本。我听说有人说 inno 会自动升级,但我用他们的名字和版本号创建图标。提前致谢。

【问题讨论】:

  • {#MyAppVersion] 可能是问题所在,但您没有提供。 (默认为AppVersion,不带My前缀。)

标签: registry inno-setup pascal


【解决方案1】:

您看到的问题是因为要在 InnoSetup 的主要部分中将函数作为参数调用,您需要使用 {code:} 构造。
这是一个对我有用的例子:

[Registry]
Root: HKCU; Subkey: "Software\MyCompany\Product"; ValueType: DWORD ; ValueName: "Version" ;     ValueData: {code:GetVersion|{#MyAppVersion}}; Flags: uninsdeletekey;

【讨论】:

    【解决方案2】:

    正如@Ken White 所说,您的常量已“损坏”,这使得整个字符串文字无效。 即使那样,您的 ValueData 仍然只是GetVersion(WhateverMyAppVersionIs),而不是该函数的结果。 为此,请使用 {code:} 常量调用 GetVersion。

    【讨论】:

      猜你喜欢
      • 2014-08-09
      • 2017-05-05
      • 2016-05-14
      • 2019-07-31
      • 2012-05-11
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多