代码正常运行,但是升级到inno 6.0.2之后,编译时出现错误。错误:
类型不匹配
第if LoadStringFromFile(TmpFile, ExecStdout) then
行中的代码如下:
function NextButtonClick(CurPageID: Integer): Boolean;
var
TmpFile, ExecStdout: string;
ResultCode: integer;
begin
Result := True;
if CurPageID = HostingPage.ID then
begin
Domain := HostingPage.values[0];
DomainPort := HostingPage.values[1];
TmpFile := ExpandConstant('{tmp}') + '\~pid.txt';
Exec('cmd.exe',
'/C FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "0.0:'+DomainPort+'"`) DO '
+ '@tasklist /fi "pid eq %i" | find "%i" > "' + TmpFile + '"', '', SW_HIDE,
ewWaitUntilTerminated, ResultCode);
if LoadStringFromFile(TmpFile, ExecStdout) then
begin
MsgBox('The Port ('+DomainPort+') ' #13 + ExecStdout, mbError, MB_OK);
Result := False;
end;
DeleteFile(TmpFile);
end;
end;
答案 0 :(得分:0)
您发布的代码不完整,请始终发布MCVE。
问题出在使用错误类型的参数,请参见文档:
function LoadStringFromFile(const FileName:String; var S: AnsiString):布尔值;
像这样更改它:
function NextButtonClick(CurPageID: Integer): Boolean;
var
TmpFile: String;
ExecStdout: AnsiString; // << Was String in your script
ResultCode: Integer;
这是因为Inno Setup 6是Unicode only:
默认行为的更改:从 Inno Setup 6开始,只有一个版本可用:Unicode Inno Setup。 Unicode Inno Setup已经存在9年了,但是如果您尚未更新:请参阅帮助文件中的Unicode Inno Setup主题以获取更多信息。基本上,除非您使用[Code]进行带有字符串参数的DLL调用,否则不必对脚本进行任何更改。