我尝试在执行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上
答案 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中对资源的访问权限,以便能够在另一个目录中工作。