诡异问题排查
最近碰到一个问题,很奇怪,需要重启机器才能解决,如是花了两天时间排查,最后发现需要设置工作目录。
1.情景:
C#写的一个Winform程序CSharpWin.exe,Process对象启动继承运行cmd.exe方式执行了一串批处理任务:设置python虚拟环境并执行python脚本。QT编写的Winform程序QtWin.exe使用QProcess调用CShareWin.exe,CShareWin.exe能启动但执行虚拟环境下的python脚本不成功,但重启计算机,执行QtWin.exe可以正常运行CShareWin.exe并能执行到python脚本;或者双击CShareWin.exe也能正常运行python脚本,或者cmd控制台上运行CShareWin.exe也能正常执行成功。
2.分析过程:
1)开始以为是权限问题,以管理员权限运行不能解决问题。
2)双击CShareWin.exe也能正常运行python脚本,通过外壳QtWin.exe执行不能成功。考虑应该切CShareWin.exe目录在执行到改写CShareWin.exe,如是改写QtWin.exe中启动进程方式如下,居然成功。
QProcess process;
QListString arguments;
aruments<<"/C cd /d CShareWin.exe所在目录 && call CShareWin.exe"
process.start("cmd.exe",aruments)
然后看了下QProcess接口,有一个设置工作目录接口setWorkingDirectory().如是可以不用启动cmd.exe方式,而直接调用CShareWin.exe.代码如下。
QProcesss process;
process.setWorkingDirectory(CShareWin.exe所在目录)
process.start("CShareWin.exe")
浙公网安备 33010602011771号