2011-10-05 33 views
1

我正在使用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会自动升级,但我用他们的名字创建了带有版本号的图标。提前致谢。

+0

的'{#MyAppVersion]'可能是问题,但你没有提供它。 (默认是'AppVersion',不带'My'前缀。) –

回答

2

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

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

谢谢,这工作。 – Vikyboss

2

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

+0

谢谢。这有帮助。 – Vikyboss