1

我一直在尝试在服务器端执行 .exe 文件。
换句话说,我真正想要的是在用户将文件上传到服务器后执行一个 .exe 文件(转换此文件)。
我试过打开记事本看看问题是出在我的可执行文件还是在php代码中,但它都没有运行(尽管如果我检查任务管理器,我可以看到它有一个属于系统的notepad.exe进程用户)。我猜这违反了 Windows 上的一些安全措施
我应该说我在 Windows 7 x64 上运行 XAMPP。

这就是我正在做的事情:

exec("cd ../../ConvertObj/ && ConvertObj.exe", $data, $ret);
//for debuggging
var_dump($data);
var_dump($ret);

如您所见,我也在尝试读取输出以试图找到问题。现在,您可能想知道为什么我也将其标记为 unity3d。这个可执行文件是一个 Unity3d 独立 .exe 。对于我读过的内容,有一个命令行参数允许 Unity3d 在没有 GUI 的情况下运行,但不幸的是,这是一个仅限 PRO 的参数......我真的不介意在服务器 xD 上查看 GUI
所以,输出我得到(使用unity3d .exe)是

array (size=2)
    0 => string 'Mono path[0] = 'C:/xampp/htdocs/ConvertObj/ConvertObj_Data/Managed'' (length=67)
    1 => string 'Mono path[1] = 'C:/xampp/htdocs/ConvertObj/ConvertObj_Data/Mono'' (length=64)

我虽然有点奇怪。我的猜测是 Windows 正在阻止服务器上的所有 GUI 应用程序,因为 dir 命令完美地工作,我认为这两行是 Unity3D 抱怨的东西......有什么想法吗?

4

1 回答 1

0

我以前不得不这样做。在用户受限的封闭(局域网)环境中,我将其破解了。

(为了记录,这不是我引以为豪的事情,但它一直有效并且一直有效,如果这是供公众使用,我不会推荐这个)

在 XP 中,您只需在 apache 服务上选中“允许此服务与桌面交互”即可。这在 W7 中不起作用,根据我的经验,上面的评论也建议将服务设置为使用 apache 用户......这也不起作用。

在 W7 中,我知道使其工作的唯一方法是在服务菜单中停止将 apache 作为服务运行(将启动设置为手动)。然后使用 httpd.exe 并在您的启动项中创建一个快捷方式。

此外,出于某种原因,我不得不使用完整的绝对路径,例如。c:\程序...

这又是一个可怕的 hack,99% 的时间我会说会有更好的方法来做你正在做的事情。尝试重新考虑您的方法。

于 2012-07-30T10:33:01.373 回答