【发布时间】:2014-03-07 03:34:58
【问题描述】:
默认情况下 PHP 在 IUSR 帐户下运行。直接执行时:
$lastline = exec('D:\\MyProgram.exe', $output, $return_var);
它运行,但由于权限不足,程序无法执行它的任务。我的问题是:如何从 PHP 网站在特定 Windows 帐户下运行可执行文件?
我试过了:
当通过Sysinternals PsExec执行时:
$lastline = exec('D:\\PsExec.exe -u UserName -p Password -accepteula "D:\\MyProgram.exe"', $output, $return_var);
MyProgram.exe 甚至根本不执行。 PHP 抛出空输出并且 return_var 是-1073741502。我认为这是某种未处理的异常。
当通过lsrunas执行时:
$lastline = exec('D:\\lsrunas.exe /user:UserName /password:Password /domain:DOMAIN /command:"D:\\MyProgram.exe" /runpath:D:\\', $output, $return_var);
MyProgram.exe 也不执行。 PHP 抛出空输出,return_var 为 0。
Microsoft 内置的runas 命令不起作用,因为它不接受密码作为参数。
尝试使用不同的 PHP 函数,例如 shell_exec、system 和 passthru
尝试在 IIS 下创建新的应用程序池,以在 LOCAL SERVICE、SYSTEM 或特定用户下运行网站。 编辑:这是我出错的地方。它应该可以工作,但在未启用“加载用户配置文件”设置时会失败(我的回答中的第 3 步)。
有人有可行的建议吗?
注意:所有命令都可以直接通过命令行运行和测试。
【问题讨论】:
-
我认为你可以将密码“管道”到
runas- 类似于exec('echo adminpassword | runas /user:administrator fullPathToProgram',$output);
标签: php command-line exec psexec runas