本帖最后由 mumubangditu 于 2011-01-14 04:06:59 编辑

解决方案 »

  1.   

    建议你使用 popen http://cn2.php.net/manual/en/function.popen.php
      

  2.   

    参考
    http://leeon.me/a/compare-php-system-executing-command-system-exec-passthru
      

  3.   

    4,5楼的,能不能给写个 popen 的代码?看不太懂教程……
      

  4.   


    <?php
    $handle = popen('C:\WINDOWS\system32\notepad.exe', "r");
    pclose($handle);
    ?>
      

  5.   

    shineofgod,我运行了popen,但是notepad.exe运行3秒钟后,并没有被终止关闭啊……
      

  6.   

    popen — 打开进程文件指针说明
    resource popen ( string $command , string $mode )
    打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。 返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。此指针可以用于 fgets(),fgetss() 和 fwrite()。 如果出错返回 FALSE。 Note: 如果需要双向支持,使用 proc_open()。 Example #1 popen() 例子<?php
    $handle = popen("/bin/ls", "r");
    ?> Note: 如果未找到要执行的命令,会返回一个合法的资源。这看上去很怪,但有道理。它允许访问 shell 返回的任何错误信息: <?php
    error_reporting(E_ALL);/* 加入重定向以得到标准错误输出 stderr。 */
    $handle = popen('/path/to/spooge 2>&1', 'r');
    echo "'$handle'; " . gettype($handle) . "\n";
    $read = fread($handle, 2096);
    echo $read;
    pclose($handle);
    ?> 
      

  7.   

    <?php
    $handle = popen('C:\WINDOWS\system32\notepad.exe', 'r');
    pclose($handle);
    ?>
    是这样写的吗?
    fread怎么加啊?
      

  8.   

    居然有个popen?长了见识,我也赞成用popen
      

  9.   

    建议你使用 popen http://cn2.php.net/manual/en/function.popen.php
      

  10.   

    PHP code<?php
    $handle = popen('C:\WINDOWS\system32\notepad.exe', "r");
    pclose($handle);
    ?>这个没有设置打开3秒后自动关闭啊。哪里有参数设置?
      

  11.   

    老师一定教过你, 独立思考问题.
    [code]
    <?php
    $handle = popen('C:\WINDOWS\system32\notepad.exe', "r");sleep(20);pclose($handle);
    ?>
    [/code]
      

  12.   

    <?php
    $handle = popen('C:\WINDOWS\system32\notepad.exe', "r");
    sleep(10);
    pclose($handle);
    ?>
      

  13.   


    老大,这个我自己也试过,没有作用啊。记事本可以被打开,但是等待时间都已经超过60秒了,程序还是没有执行关闭。测试环境PHP5.2+APACHE2+WINXP。
      

  14.   

    <?php
    $handle = popen('C:\WINDOWS\system32\notepad.exe', "r");
    pclose($handle);
    ?>
      

  15.   

    popen返回的是notepad.exe在php环境下的进程指针,这个指针只能用于读取和输出数据给notepad,pclose关闭的只是这个指针而不是notepad本身.我也不清楚如何关闭notepad,但是我想应该从windows的编程基础中查找如何获取任务管理器中的进程,然后用system函数去调用windows的关闭程序
      

  16.   

    这个和我先前想的一样,但是问题是可以打开任务管理器,但怎样确定关闭任务管理器里的notepad.exe?
    哎~~实在不行的话,只能试试CRON了。
    //$cmd1 = 'C:\WINDOWS\system32\taskmgr_original.exe';
    //system($cmd1);
      

  17.   

    popen是单向的,用proc_open吧
    试试看
    /**
     * windows only
     */
    $descriptorspec = array(   
    0 => array("pipe", "r"), 
        1 => array("pipe", "w")
    );
    $cwd = 'C:\WINDOWS\system32';
    $process = proc_open('notepad.exe', $descriptorspec, $pipes, $cwd);
    $s   = proc_get_status( $process );//得到的信息都是父进程cmd.exe的状态,而非子进程notepad.exe的.所以不能直接kill掉这个process id
    sleep( 3 );
    exec('taskkill /PID '.$s['pid'] . ' /T'); //树型删除,删除所有父进程与对应的子进程.原来以为子进程id必定大于父进程,写了一通代码,后来发现不是,且找到了这个命令
    proc_close( $process );
      

  18.   

    @foolbirdflyfirst,太棒了,高手中的高手终于出现了。
    感谢大家的帮助。