2009-05-22 179 views
1

我正在使用Inno安装程序来安装我的产品,在安装程序中我执行了一个extern程序(Validator.exe),如果此程序被取消或中止,我必须使用我自己的安装程序。如何使用Inno Setup取消安装程序?

我将Validator.exe保存在{app}路径中并执行它。

当安装程序运行时我叫Validator.exe文件,我得到执行的结果是: Exec的(ExpandConstant( '{}应用/Validator.exe'), '', '',SW_SHOW,ewWaitUntilTerminated ,ResultCode)。

但是,这是与我已经尝试了所有的解决方案的问题:

InitializeSetup:该Validator.exe文件不在{}应用程序还复制,因此它永远不会被执行。

中止:只能在(InitializeSetup,InitializeWizard,CurStepChanged(ssInstall))中调用,因此在这些情况下,尚未复制Validator。

DeinitializeSetup:我可以在安装后执行Validator.exe,但是从这一点我无法中止我的安装程序。

我需要一些方法来取消安装后,Validator.exe已被复制并执行,也许调用卸载,但我不能这样做。

感谢您的任何帮助。

回答

2

在Inno Setup中,“外部”文件是包含在安装程序EXE文件中的而不是。它存在于外部,大概包含在安装程序EXE文件的独立文件中。你说你没有在InitializeSetup事件中调用Abort的原因是验证程序尚未复制到{app}目录,这是可以理解的,因为此时用户还没有指定安装目标应该是什么。但是你不需要将验证器放在目标目录中。它已经是一个外部文件,所以只需从它已经存在的任何目录中运行即可。

另一种可能性是将所需的验证功能放入DLL中。您可以将DLL包含在安装程序中,Inno Setup会将DLL解压缩到临时位置,以便您可以从安装脚本中调用它的函数。

2

非常感谢。这是我如何修复它:

function InitializeSetup(): Boolean;. 
var 
    ResultCode : Integer; 
begin 
    Result := True; 
    ExtractTemporaryFile('Validator.exe'); 

    if Exec(ExpandConstant('{tmp}\Validator.exe'), '', '', SW_SHOW, 
    ewWaitUntilTerminated, ResultCode) 
    then begin 
    if not (ResultCode = 0) then begin 
     Result := false; 
    end; 
    end; 
end; 
相关问题