2012-01-04 77 views
0

我試圖在20小時執行後重新啓動程序,但我無法從當前目錄以外的其他位置啓動它。無法從其他目錄啓動EXE

例如,如果我稱之爲:

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

那些看起來不像php變量... – Neal 2012-01-04 14:45:36

+0

正確,因爲它是perl。 我標記的PHP,因爲沒有phpserver標記。 – Kurt 2012-01-04 14:46:42

+0

我很困惑爲什麼PHP標籤? – rdlowrey 2012-01-04 14:48:25

回答

1

如果這是通過一個Web應用程序中運行,你的路可能已被設置爲不包括當前目錄.(可能的安全問題),在這種情況下,你的第一個解決方案完整的路徑將工作,但第二個解決方案不會。

可能的修復方法是將'TaktPlayer2.exe'更改爲'./TaktPlayer2.exe',或者提供完整路徑。

+0

聰明,我會測試這個! – Kurt 2012-01-04 14:55:09

+0

@Kurt讓我知道它是否有效。 – TLP 2012-01-04 15:03:56

+0

我嘗試過 D:\ TAKT_Engine \ Server \ taktpreviewserver 並將D:\ TAKT_Engine \ Server \ taktpreviewserver添加到路徑 但是這並沒有改變任何東西。 – Kurt 2012-01-04 15:09:44

0

根據調用腳本正在運行的用戶,調用腳本可能沒有執行您嘗試執行的文件的權限。確保您擁有正確設置的權限。

+0

但是,它不會與其他路徑一起工作。 – TLP 2012-01-04 14:58:27

+0

好的,但爲什麼第一個解決方案會起作用? – Kurt 2012-01-04 14:58:55

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 ::彬一直是你的腳本所在的目錄見perldoc FindBin

另請注意,我將系統調用參數和$!包含在die()/croak()消息中。事實證明可以節省時間。

+0

我試過了,但是當我嘗試從服務器啓動它時問題依然存在:(實際上它似乎是一個比Perl更多的服務器處理問題 – Kurt 2012-01-04 16:04:37

+0

並且錯誤消息中有什麼? – Dallaylaen 2012-01-04 16:31:47

+0

問題是,沒有任何反應 – Kurt 2012-01-04 16:33:34

0

好吧,最後我決定改變.exe中的資源訪問權限,以便能夠使它在另一個目錄中工作。