无法从另一个目录启动exe

时间:2012-01-04 14:41:59

标签: perl

我尝试在执行20小时后重新启动程序,但我无法从当前目录以外的其他位置启动它。

例如,如果我打电话:

my @arglist = ('..\Server\taktpreviewserver\TaktPlayer2.exe', 'VLC_Player');

exec(@arglist) or die "Unable to relaunch TaktPlayer2.exe";

这会有效,但我需要访问..\Server\taktpreviewserver\上的一些内容。

所以我做了:

chdir('..\Server\taktpreviewserver');

my @arglist = ('TaktPlayer2.exe', 'VLC_Player');

exec(@arglist) or die "Unable to relaunch TaktPlayer2.exe";

如果从phpServer启动,那将无法工作......(但如果单独调用则工作正常!!)

有关于chdir或从服务器启动程序的任何事情吗?

Ps:我在Windows XP上

4 个答案:

答案 0 :(得分:1)

如果这是通过Web应用程序运行的,那么您的路径可能已设置为不包含当前目录.(可能存在安全问题),在这种情况下,您的第一个完整路径解决方案可行,但第二个解决方案不会。

可能的解决方法是将'TaktPlayer2.exe'更改为'./TaktPlayer2.exe',或提供完整路径。

答案 1 :(得分:0)

根据调用脚本运行的用户,调用脚本可能没有权限执行您尝试执行的文件。确保您已正确设置权限。

答案 2 :(得分:0)

试试这个:

use FindBin qw($Bin);
# ...
my $path = "$Bin/../yadda/yadda";
chdir $path or die "Cannot chdir to $path: $!";
# ...
exec(@arglist) 
    or die "Unable to relaunch TaktPlayer2.exe (@arglist): $!";

$ FindBin :: Bin始终是您的脚本所在的目录。请参阅perldoc FindBin

另请注意,我将系统调用参数和$!包含在die() / croak()消息中。结果是节省时间。

答案 3 :(得分:0)

好吧最后我决定更改.exe中对资源的访问权限,以便能够在另一个目录中工作。