比如我给客户装了一个软件是1.0的,那么我软件升级后给客户装的时候安装程序自动找到原来的安装目录然后进行更新安装

解决方案 »

  1.   

    是啊,我是知道怎么用Inno Setup写注册表,可读注册表的内容和如何安装我就不会了
      

  2.   


    参考这个
    procedure InitializeWizard();
    var ResultStr: String;
        ResultCode: Integer;
    begin
      if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\你的程序名_is1', 'UninstallString', ResultStr) then
      begin
        ResultStr := RemoveQuotes(ResultStr);
        Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
      end;
    end;
      

  3.   

    建议有空参考我的项目的安装脚本
    code.google.com/p/lextudio楼上的代码只考虑了默认的情况。实际上如果设置了GUID的话,“你的程序名”这个地方就是GUID了。其实Inno默认的行为就是新的安装包会覆盖安装之前的版本(当然还有几个前提条件),其实不需要手工卸载的。我之所以在自己的项目里面像楼上一样调用卸载,是为了清理.NET GAC之类的资源。使用Inno需要你最好建立一个干净的虚拟机镜像来做安装测试。像VMware的话一定要用Snapshot,保证能够倒回最初的样子。很多时候需要反复测试来看Inno的默认行为是怎么样的,怎么来写脚本。不过现在感觉花了时间之后收获还是蛮多的。