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);
。 - JackTheKnife