找回密码
 加入
搜索
查看: 7192|回复: 13

[AU3基础] 关于RUN/SHELLEXCUTE启动EXE的奇怪问题

  [复制链接]
发表于 2012-9-7 16:56:56 | 显示全部楼层 |阅读模式
本帖最后由 shijimin1005 于 2012-9-7 16:58 编辑

我需要用run或者shellexcute来启动一个C#写的程序B

这里我还有一个C#程序A

我程序一开始会启动A
RunWait(@ScriptDir & "\A.exe")

启动完成,OK没问题

然后通过判断需要启动B,带参数
Run(@ScriptDir & '\B.exe' & ' "'&$pre&'"')
$pre为参数内容

问题就出现了,程序应该是启动了,但,程序内容却不执行
单独运行B.EXE,OK,成功
另外建一个AU3的程序就1句代码,即
Run(@ScriptDir & '\B.exe' & ' "'&$pre&'"')
OK,成功,没问题

so,我想,使用一个中转程序,即,先调用另外一个AU3的程序,让这个程序调用B.exe
结果任然没效果,但单独运行这个中转AU3程序,也是OK没问题的

shellexcute替换RUN我也试过,一个结果

实际测试的时候,会出现一个情况就是,有极少数的情况是可以调用B.EXE的

这里我不明白的是A.EXE为什么就能调用,B.EXE我不带参数调用也不成功

不知道大家看懂没有
 楼主| 发表于 2012-9-7 16:59:15 | 显示全部楼层
求分析求解答...
 楼主| 发表于 2012-9-7 16:59:15 | 显示全部楼层
求分析求解答...
发表于 2012-9-7 18:37:24 | 显示全部楼层
如何如此断定程序确实执行了?
发表于 2012-9-8 02:40:13 | 显示全部楼层
run调用B.exe 加上"工作目录"试试,你的B里有存在相对目标的引用吧
发表于 2012-9-8 21:22:41 | 显示全部楼层
极有可能是工作目录的问题,我以前也遇到过
发表于 2012-9-8 21:24:22 | 显示全部楼层
进程里有B程序么?
 楼主| 发表于 2012-9-10 17:43:23 | 显示全部楼层
回复 4# ajian55


    因为我在那个B程序中写了记录的方法,只要进程序,就会生成报告
 楼主| 发表于 2012-9-10 17:47:34 | 显示全部楼层
回复 5# wua0550


    我不知道这里的工作目录确切的意思,但我查了下,似乎是这样的

我的用法
run(@scriptdir&"\b.exe")

工作目录
run("b.exe",@scriptdir)

不知道我的用法和工作目录的有区别吗
 楼主| 发表于 2012-9-10 17:48:29 | 显示全部楼层
回复 7# happyplace


    我测试下来是获得pid了,那应该说是有进程了吧
发表于 2012-9-10 22:54:40 | 显示全部楼层
本帖最后由 wua0550 于 2012-9-10 22:59 编辑

回复 9# shijimin1005

如果你的b.exe里的存取操作全是绝对路径的话就不会出问题了~~如果b.exe用是是相对路径那运行时如果不加上工作目录那读取操作就会出现问题了!
给你是例子方便你理解吧
B.exe的代码如下, config.ini用了相对目录
$a=IniRead("config.ini","config","a","失败")
MsgBox(0,0,$a)
config.ini内容如下
[config]
a=成功
编译后双击运行b.exe出现的就是 "成功"
   
下面我们把b.exe放在d盘下

然后把下面的代理编译后放在不是于b.exe相同的目录,运行后看到的就是 "失败"
run("d:\b.exe")
加下工作目录后 反回就是成功了
run("d:\b.exe","d:")
表达能力不太好~~不过通过例子你应该能明白了吧
发表于 2012-9-11 15:54:25 | 显示全部楼层
可以通过cmd来进行B的运行和参数下发。
 楼主| 发表于 2012-9-25 10:01:11 | 显示全部楼层
回复 11# wua0550


    似乎有一点明白你的意思了,但我B.EXE里面用的也是绝对路径,效果却是时好时坏,有时候有效果有时候没效果,这点我百思不得其解,感谢你给我的提示,我去试试,试完回复结果,谢谢
发表于 2012-9-25 16:10:17 | 显示全部楼层
回复 13# shijimin1005


   虽然我没有看懂楼主的意思,但是这个方法一定可以解决你的问题~~

如果使用shellexecute()函数运行一个程序与直接双击有差异,就不要直接用它来运行程序,而是创建该程序的快捷方式(需要参数的也在快捷方式里加),然后用shellexecute('你要运行的程序的快捷方式.exe.lnk')
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 15:51 , Processed in 0.087475 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表