Installation Inno安装程序-如果计算机上已经安装了应用程序,如何在安装时显示通知消息?

Installation Inno安装程序-如果计算机上已经安装了应用程序,如何在安装时显示通知消息?,installation,inno-setup,Installation,Inno Setup,我是Inno安装的新手。我正在使用Inno Setup compiler-5.1.6为我的C#应用程序创建安装程序 使用我的脚本创建了一个安装程序,它运行良好。它安装应用程序,也可以从控制面板卸载 但我的问题是,如果我的应用程序已经安装在我的机器上,并且我尝试再次安装它,那么它将在没有任何消息的情况下安装。它取代了旧的安装 所以,我的要求是,如果应用程序已经安装,它应该向我显示一条消息,“应用程序已经安装{existing version}。是否要替换现有安装。”以及“Yes”和“No”按钮。如

我是Inno安装的新手。我正在使用Inno Setup compiler-5.1.6为我的C#应用程序创建安装程序

使用我的脚本创建了一个安装程序,它运行良好。它安装应用程序,也可以从控制面板卸载

但我的问题是,如果我的应用程序已经安装在我的机器上,并且我尝试再次安装它,那么它将在没有任何消息的情况下安装。它取代了旧的安装

所以,我的要求是,如果应用程序已经安装,它应该向我显示一条消息,“应用程序已经安装{existing version}。是否要替换现有安装。”以及“Yes”和“No”按钮。如果用户单击“是”按钮,安装程序应正常进行,否则应退出安装向导而不重新安装

AppVersion:它随版本的增加而变化

AppId:对于所有版本,它将保持不变

所以,请有人能帮我实现上述目标。。 提前谢谢

请参考我的问题,您可以使用检查应用程序注册表的相同技巧来检查应用程序是否已安装

要检查应用程序的版本,您可以使用我从中获得的以下代码:

[代码]
函数GetNumber(var-temp:String):整数;
变量
第二部分:字符串;
pos1:整数;
开始
如果长度(温度)=0,则
开始
结果:=-1;
出口
结束;
位置1:=位置('.',温度);
如果(pos1=0),则
开始
结果:=stroint(温度);
温度:='';
结束
其他的
开始
部分:=副本(临时,1,位置1-1);
温度:=副本(温度,位置1+1,长度(温度));
结果:=stroint(部分);
结束;
结束;
函数CompareInner(var temp1,temp2:String):整数;
变量
num1,num2:整数;
开始
num1:=GetNumber(temp1);
num2:=GetNumber(temp2);
如果(num1=-1)或(num2=-1),则
开始
结果:=0;
出口
结束;
如果(num1>num2),则
开始
结果:=1;
结束
否则,如果(num1
GetNumber函数只返回“主要”版本。 若要应用完整版本比较,必须连接主要版本和次要版本

function GetNumber(var temp: String): Integer;
var
  part: String;
  pos1: Integer;
begin
  if Length(temp) = 0 then
  begin
    Result := -1;
    Exit;
  end;
    pos1 := Pos('.', temp);
    if (pos1 = 0) then
    begin
      Result := StrToInt(temp);
      temp := '';
    end
    else
    begin
    part := Copy(temp, 1, pos1 - 1);
      temp := Copy(temp, pos1 + 1, Length(temp));
      insert(temp, part, pos1);
      Result := StrToInt(part);
    end;
end;

如果我是你,如果用户试图安装旧版本,我也会警告他们,不仅仅是在版本匹配的情况下……一件重要的事情是,你应该始终检查
RegQuery…
函数以及
ShellExec
的返回值。我知道您假设如果存在卸载注册表项,则
DisplayVersion
UninstallString
键将在那里。但是如果他们不见了呢?此处使用的版本比较函数将告诉您,如果传递一个空字符串,则版本等于(如果缺少注册表值,则这就是
oldVersion
变量中的内容)。最后一件事是,卸载密钥可以存储在
HKEY\u CURRENT\u USER
根目录下<代码>:)
function GetNumber(var temp: String): Integer;
var
  part: String;
  pos1: Integer;
begin
  if Length(temp) = 0 then
  begin
    Result := -1;
    Exit;
  end;
    pos1 := Pos('.', temp);
    if (pos1 = 0) then
    begin
      Result := StrToInt(temp);
      temp := '';
    end
    else
    begin
    part := Copy(temp, 1, pos1 - 1);
      temp := Copy(temp, pos1 + 1, Length(temp));
      insert(temp, part, pos1);
      Result := StrToInt(part);
    end;
end;