折腾秋式网站负载压力测试工具的客户端,需要打包安装程序。
于是搜了搜电脑,找到了最旧的那Setup Factory 7安装,其它步骤都好说。
倒有一个需求,就是安装完后,要运行一下其中的一个bat批处理文件来启动服务。
结果悲催的事就发生了,运行时总会遇到路径错误。。。
于是研究来研究,中间花了3-4小时,在Setup Factory 7->.NET 自带安装程序 ->自己写安装程序 ->换成Setup Factory 8版本,又遇到同样问题,又换回只好自己写程序。
中间也找了无数答案,没有一个有用的。。。
最后决定自己写了,没想到自己写的代码,在调用bat时,也发现路径问题了,这才恍然。
知道是bat自身的路径可能有问题,于是一搜,找到了以下相关文字:
获取批处理文件所在路径
在开发时,经常需要使用批处理运行一些程序,java程序 犹其是这样,往往需要运行时根路径。Hardcode一个路径总是令自己觉得不自在,例如一个java程序从一台机copy到另外一台机,盘符往往发生变化,先修改一下bat里的路径再运行显然很麻烦。
在批处理开头加入cd /d %~dp0 一行代码就真真实实地做到“编写一次,到处运行”。%0是批处理文件本身的路径,%~dp进行扩展, d向前扩展到驱动器,p往后扩展到路径。例如,你的bat文件在e:/mybat/test.bat,则%0就是e:/mybat/test.bat, %~dp0是e:/mybat/。
另外,%i提取第i个命令选项,例如%1提取第1个option,i可以取值从1到9
%~0: 取文件名(名+扩展名)
%~f0:取全路径
%~d0:取驱动器名
%~p0:只取路径(不包驱动器)
%~n0:只取文件名
%~x0:只取文件扩展名
%~s0:取缩写全路径名
%~a0:取文件属性
%~t0:取文件创建时间
%~z0:取文件大小
以上选项可以组合起来使用。
基本明白了,最终答案不是运行不到bat文件,而是调用它的路径和里面的路径不是一致的。
如果我们双击bat,当前路径就是bat所在的路径。
如果用程序调用bat,当前路径就变成程序所在的路径。
所以批处理:%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /u WSTService.exe
像这样的路径,就找不到了。
解决方法就是在第一行,把路径设置好:
cd /d %~dp0
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /u WSTService.exe
改成这样,这样调用时就正常了。
秋色园是QBlog的官方站点,由路过秋天创建,基于cyqdata数据层框架开发的支持多用户、多语言、多数据库(access,mssql,oracle)、目录级url等功能强大的博客系统