PHP - Any chance to run GUI program through exec&#

2019-04-10 12:57发布

i need to run a web browser (chrome - firefox ..) using exec

i have tried to do it using bat file (this method mentioned here)

C:\Users\farok\AppData\Local\Google\Chrome\Application\chrome.exe www.google.com

when i open the file using windows every thing goes well but nothing happened when i open it using exec

and i have tried to do it using jar file by BrowserControl class

BrowserControl.displayURL("www.google.com");

and the same as bat file happened so is there any way to do it?

note:im using wamp 2.2 ,Apache 2.0 , PHP V5.3.8

Update

i found that after i run this command

exec('"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" "www.google.com" 2> errors.txt');

firefox dose open in task manager but the browser interface not visible .. any ideas?

5条回答
小情绪 Triste *
2楼-- · 2019-04-10 13:36

Probably the easiest way is to use COM (I assume it will only run locally on a Windows computer):

<?php
function _exec($cmd) 
{ 
  $WshShell = new COM("WScript.Shell"); 
  $oExec = $WshShell->Run($cmd, 0,false); 
  echo $cmd;
  return $oExec == 0 ? true : false; 
}

_exec("youexe.exe");
?>

Taken from here

查看更多
一纸荒年 Trace。
3楼-- · 2019-04-10 13:40

I solved that by disabling apache service on windows and start apache with httpd.exe After that can use exec() for open any GUI windows program.

exec("Path_to_mi_program.exe" "file_to_open");
查看更多
做自己的国王
4楼-- · 2019-04-10 13:40

It's just about users. When you run a program, it runs as system user. I tried runas /user:myusername blabla.exe but it returned password for myusername and exit.

$deneme = shell_exec('runas /user:myusername C:\Windows\Temp\putty.exe');
echo "$deneme";

it returned:

myusername için parolayı girin: (english: password for myusername)
查看更多
狗以群分
5楼-- · 2019-04-10 13:47

so this is another good workaround i found here, the idea is to create a scheduler that execute the program you want and call it using command

hope this help :

shell_exec('SCHTASKS /F /Create /TN _notepad /TR "notepad.exe" /SC DAILY /RU INTERACTIVE');
shell_exec('SCHTASKS /RUN /TN "_notepad"');
shell_exec('SCHTASKS /DELETE /TN "_notepad" /F');
查看更多
ら.Afraid
6楼-- · 2019-04-10 13:54

I'm no windows expert, but I think you need to allow desktop interaction, which isn't easy/possible if the parent process runs as a windows service. php runs inside the apache process, which you probably have running as a service.

Try stopping the service and manually starting httpd.exe, and then the following works for me on win7 when i request the script via localhost url through apache. my php interfaces with apache via plain old cgi.

exec('"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" "http://stackoverflow.com/"');

note my use of quotes.

查看更多
登录 后发表回答