aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 19151|回复: 5

process打开外部程序的问题

[复制链接]

15

主题

33

回帖

282

积分

荣誉会员

积分
282
发表于 2010-12-27 01:14:41 | 显示全部楼层 |阅读模式
有几个安装程序(EXE),想作一个aardio的exe按照一定的顺序执行安装;
如果用
process=process(setupfileurl)         //setupfileurl 为要运行的EXE路径

可以打开安装程序,但是安装完成不能返回值或通知aardio的这个exe,就很难开始处理下一个

如果用

process.execute_wait(setupfileurl)

这样的话可以等到上一个安装完成才返回aardio的exe接着处理下一个,但是在安装过程中aardio的这个exe 会一直处于卡死状态,如果安装的程序稍大,就很不好用;

要是第一种方法,在EXE运行完成后能回调个方法就好了,请老大指教







170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2010-12-27 08:45:11 | 显示全部楼层
你有线程句柄,进程句柄什么不可以干,
var prcs = process("notepad.exe")
thread.wait( prcs.thandle )
至于卡,你单线程做两件事肯定卡啊,用多线程就可以了。

import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 )
winform.add(
btnRun={ bottom=114;right=293;left=71;top=66;z=1;text=
"打开记事本";cls="button" }
)
/*}}*/

winform.btnRun.oncommand =
function(id,event){

    thread.create(
        
function(hwnd){
            
import process  
            
import win;
            
            win.setText(hwnd,
"请稍等...")
            
var prcs = process("notepad.exe")
            thread.wait( prcs.thandle )
            win.setText(hwnd,
"已完成...")
        }
        ,winform.btnRun.hwnd
    )

   
}

winform.show()
win.loopMessage();


15

主题

33

回帖

282

积分

荣誉会员

积分
282
 楼主| 发表于 2010-12-27 09:30:36 | 显示全部楼层
  1. setupexe=function(){
  2. //win.msgbox(setupfileurl,"启动新线程2")


  3. thread.create(
  4. function(infile,func){
  5. import process
  6. import win;

  7. //win.msgboxTest(infile,"标题")
  8. var prcs = process(infile)
  9. thread.wait( prcs.thandle )
  10. func()        //运行传进来的这个function
  11. }
  12. ,setupfileurl,setupok
  13. )


  14. }

  15. setupok=function(){
  16. win.delay(500)
  17. win.msgbox(wb,"aardio")   //这里输出null  ,但wb在启动的winform里是有的,但是传到线程里就变成空了

  18. wb.doScript("setupok()")  // 这是要执行web窗口里的JS

  19. }
复制代码

老大帮我看一下, 你给的例子是传了一个控件的句柄进去,但我如果是传一个方法进去,会发现方法里的变量作用域不对,怎么才能执行到winform里的那个function,能让wb.doscript启作用;


15

主题

33

回帖

282

积分

荣誉会员

积分
282
 楼主| 发表于 2010-12-27 13:09:32 | 显示全部楼层
意思我能明白了,不过线程怎么回调winform里的function呢?  
win.settext()//这个只能改一些文字
我想的到的是在winform里不停的检测某个值是否变化

点评

把你的思路整理一下,你会想明白怎么做。 如果不明白,把你试图表达的意思整理清楚一些,看不太明白你想要干什么。  发表于 2010-12-27 13:15

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2010-12-27 13:01:55 | 显示全部楼层
不能这样写,线程是隔离的环境,不能把直接引用外部的对象传来传去。
这就好像两列飞驰的火车,不能头放在这个车上,脚放在那个车上。

前面的例子也可以看到,你可以传句柄,但是不可以把winform或者winform的成员函数转进去,对象不可以一半在这个线程里,一半在那个线程里。

1

主题

8

回帖

59

积分

一级会员

积分
59
发表于 2016-7-2 10:35:45 | 显示全部楼层
Jacen.He 发表于 2010-12-27 08:45
你有线程句柄,进程句柄什么不可以干,
至于卡,你单线程做两件事肯定卡啊,用多线程就可以了。

请问能写个 process 的 startinfo 示例吗,主要是 stdInput,stdOutput相关的
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-9-15 10:46 , Processed in 0.059543 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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