使用服务器端语言PHP调用客户端应用程序

时间:2012-10-31 01:26:34

标签: php client-server exe

我正在尝试为客户端创建一个可以由php调用的应用程序,并在执行时终止某些程序。我尝试为此开发一个exe文件,但我无法通过客户端的php调用exe文件。是否还有其他可以开发的应用程序格式,可以通过php调用?我可以开发一个Windows服务并通过PHP调用它吗?我可以要求用户下载并安装任何东西。但是我无法使用javascript来实现这一点。

2 个答案:

答案 0 :(得分:2)

我会稍微改一下你的问题,以确保理解:

我可以在服务器上使用PHP脚本来调用用户(客户端)计算机上的EXE吗?

如果这是你的问题,那么答案是:

否。还有其他方法,但它们通常不会在授权网站和客户或特殊情况的非常严格的子集之外工作。

但是,您在问题中说明我可以要求用户下载并安装任何内容。如果用户可以从您的网站下载文件(可执行文件),然后在他们的计算机上运行,​​那么成为问题?

答案 1 :(得分: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 = appdata+@"\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。