在Unigui开发中,如果使用ISAPI模式开发,开发的时候,需要部署在iis下,编译完,需要停止iis,然后复制dll,再启动。如果直接设置工作目录为iis站点目录,那么会出现因为iis使用isapi而造成dll占用,然后无法编译。

分享UNIGUI开发的小技巧(一)

下面分享一个稍微简单些的方法,可以减少一点点工作量。

设置isapi站点目录直接到工程输出的目录,然后配置isapi。

分享UNIGUI开发的小技巧(一)

记住这个应用程序池的名字

然后写一个批处理,内容如下,作用是先停止应用程序池,再启动,这样就可以回收资源池,释放isapi

分享UNIGUI开发的小技巧(一)

红框里就是刚才站点的应用程序池的名字

%windir%\system32\inetsrv\appcmd stop apppool /apppool.name:"DefaultAppPool"
%windir%\system32\inetsrv\appcmd start apppool /apppool.name:"DefaultAppPool"

或者直接使用以下一条命令。推荐使用上面的方法。

%windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:"DefaultAppPool"

还有一个命令是 iisreset ,这个命令是重启iis,不管是重启程序池还是重启iis,都可以回收iis资源,释放isapi占用,这样就可以移除或修改对应dll。只是iis重启速度比较慢占用时间比较长,应用程序池回收,速度比较快。

然后配置delphi编译事件,在编译之前先回收资源,这样就可以正常编译,不会出现因为文件占用而出现的无法输出的错误。

Project->options,然后找到Build Events,在Pre-build events ->commands里直接写dos命令或者是批处理文件路径

分享UNIGUI开发的小技巧(一)

或者

分享UNIGUI开发的小技巧(一)

这样在以后编译的时候 就不会再出这个错误了。

提示:这里推荐先停止,再启动的重启方式,而不是直接recycle的回收方式是因为,回收有时间差,所以即使执行了dos命令,这时候可能还没有回收完,马上编译还是会出现文件占用的问题,而先停止再启动,是执行完停止再启动,这时候可能iis没有起来,但是不会影响编译,机器配置很高的执行速度快,可能没有此影响~~


谁还不是宝宝了