2012-10-31 63 views
0

我正在嘗試創建一個可由php調用的客戶端應用程序,並在執行時終止某些程序。我試圖爲此開發一個exe文件,但我不能通過PHP在客戶端調用exe文件。有什麼其他格式的應用程序可以開發,可以通過php調用?我可以開發一個Windows服務並通過PHP調用它嗎?我可以要求用戶下載並安裝任何東西。不過,我不能使用JavaScript來實現這一點。使用服務器端語言調用客戶端應用程序PHP

+0

您想運行您在客戶端計算機上編寫的應用程序嗎?不是服務器? – frosty

+0

是的。我可以讓他們下載它,但我不知道如何從服務器端調用它。 – user1439090

回答

0

我設法解決了這個問題,但我不確定它是否適用於任何可能遇到此問題的人。

我在php中設置了一個cookie,並檢查客戶端計算機中該cookie的值。

在我的情況下,我逼迫客戶使用XULRunner作爲他們的瀏覽器客戶端,因此只有一個存在的Cookie位置。如果瀏覽器不固定,所有瀏覽器的所有位置都需要單獨處理。

以下是我使用在客戶端的計算機應用程序的代碼: -

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Diagnostics; 

namespace beforeSEBstart 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Create a timer that polls once every 5 seconds 
      string appdata = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
      Console.WriteLine(appdata); 
      string curFile = [email protected]"\ETH Zuerich\xul_seb\Profiles\cookies.sqlite-wal"; 
      System.IO.File.WriteAllText(curFile, string.Empty); 
      var timer = new System.Threading.Timer(TimerProc, null, 5000, 5000); 
      Console.WriteLine("Polling every 5 seconds."); 
      Console.WriteLine("Press Enter when done:"); 
      Console.ReadLine(); 
      timer.Dispose(); 
     } 

     static int TickCount = 0; 
     static void TimerProc(object state) 
     { 
      ++TickCount; 
      Boolean found = false; 
      Console.WriteLine("tick {0}", TickCount); 
      string appdata = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
      Console.WriteLine(appdata); 
      string curFile = appdata + @"\ETH Zuerich\xul_seb\Profiles\cookies.sqlite-wal"; 
      string line; 
      Console.WriteLine(File.Exists(curFile) ? "File exists." : "File does not exist."); 
      //Console.WriteLine(File.Exists(curFile) ? "File exists." : "File does not exist."); 
      Stream stream = File.Open(curFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
      StreamReader file = new StreamReader(stream); 
      while ((line = file.ReadLine()) != null) 
      { 
       if (line.Contains("SEBClose2")) 
       { 
        found = true; 
       } 
      } 
      if (found) 
      { 
       Console.WriteLine("String exists in the file."); 
       System.Diagnostics.Process.Start("ConsoleApplication1.exe"); 
       foreach (System.Diagnostics.Process myProc in System.Diagnostics.Process.GetProcesses()) 
       { 
        if (myProc.ProcessName == "beforeSEBstart.vshost" || myProc.ProcessName == "beforeSEBstart") 
        { 
         myProc.Kill(); 
        } 
       }; 
      } 
      else 
      { 
       Console.WriteLine("String does not exist in the file."); 
      } 
      file.Close(); 
     } 
    } 
} 

對於服務器端,我只是成立了一個在PHP命名SEBclose2 cookie時客戶按下退出鍵。

2

我要稍微改一下你的問題,以確保我的理解:

我可以使用PHP腳本在服務器上調用用戶(客戶端)計算機上的EXE?

如果這是你的問題,那麼答案是:

還有其他的方法,但他們一般不會授權網站和客戶端或特殊情況下非常嚴格的子集之外的工作。

但是,您在您的問題狀態我可以要求用戶下載並安裝任何東西。如果用戶可以從您的網站上下載一個文件(可執行文件),然後在他們的計算機上運行它,那麼似乎是什麼問題呢?

+1

我無法想像任何人在他們正確的想法想要發生... – frosty

+0

@Frosty我同意你的意見。有一些內部網應用程序可以在計算機上使用(或安裝)文件(HTA和趨勢科技的辦公掃描Web安裝時會想到)。 – PenguinCoder

+0

我可以讓客戶端下載exe文件,但該exe文件必須在網站上單擊按鈕後執行。 – user1439090

相關問題