Combobox Inno设置:下拉菜单中的组合框立即关闭(启动应用程序)

Combobox Inno设置:下拉菜单中的组合框立即关闭(启动应用程序),combobox,inno-setup,pascalscript,Combobox,Inno Setup,Pascalscript,我得到一个应用程序池列表,然后用应用程序池的名称填充组合框。问题是,当调用OnDropDown事件时,组合框会打开几秒钟,然后立即关闭。它不会一直往下掉。我确实在组合框中看到了所有应用程序池。这是我的密码: 函数GetApplicationPoolList:TArrayOfString; 变量 i、 nExitCode:整数; sFileLines:TArrayOfString; sTempFileName,sListAppPoolCmd:String; 开始 sListAppPoolCmd:=

我得到一个应用程序池列表,然后用应用程序池的名称填充组合框。问题是,当调用OnDropDown事件时,组合框会打开几秒钟,然后立即关闭。它不会一直往下掉。我确实在组合框中看到了所有应用程序池。这是我的密码:

函数GetApplicationPoolList:TArrayOfString; 变量 i、 nExitCode:整数; sFileLines:TArrayOfString; sTempFileName,sListAppPoolCmd:String; 开始 sListAppPoolCmd:=ExpandConstant'{sys}'+'\inetsrv\appcmd list apppool/text:name'; sTempFileName:=ExpandConstant'{tmp}'+'\appPoolList.txt'; 如果未执行AppCmdFormat“%s>%s”,[sListAppPoolCmd,sTempFileName],则执行下一步代码,然后开始 MsgBox“无法获取应用程序池”,mbError,MB_OK; 结束,否则开始 LoadStringsFromFilesTempFileName,sFileLines; 终止 结果:=sFileLines; 终止 // ============================================== APPPOOLComboxDropDownsender的程序:TObject; 变量 SAPPOOLLIST:TArrayOfString; i:整数; 开始 //清除现有的 appPoolComboBox.Items.Clear; //用应用程序池填充组合框 SAPPOOLLIST:=GetApplicationPoolList; 对于i:=0的GetArrayLength SAPPoolList-1 do 开始 //带有应用程序池名称的组合框 appPoolComboBox.Items.AddsAppPoolList[i]; 终止 appPoolComboBox.ItemIndex:=0; 终止 函数ExecAppCmdparams:字符串;nExitCode:Integer:Boolean; 变量 执行成功:布尔; 结果代码:整数; 开始 execSuccessfully:=Exec'cmd.exe','/c'++''+参数,SW_HIDE,ewwaitunFilterminated,resultCode; nExitCode:=结果代码; 结果:=execSuccessfully,resultCode=0; 终止 我不确定这里发生了什么。任何建议都将不胜感激


编辑:ExecAppCmd似乎是问题所在,注释它会使组合框正常工作。。。虽然不确定为什么会关闭下拉列表,但可能是因为在应用程序启动时组合框会暂时失去焦点


我认为在下拉菜单中调用应用程序是一种糟糕的做法,因为这需要时间,而且会破坏用户体验。早些时候填充组合框,如from CurPageChanged

ExecAppCmd似乎是问题所在,注释它会使组合框正常工作。。。虽然不知道为什么…谢谢。。。是,当cmd.exe完成时,组合框将失去焦点并因此关闭。我已将其更改为在页面加载时完成。