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

使用服务器端语言PHP调用客户端应用程序,php,client-server,exe,Php,Client Server,Exe,我试图为客户端创建一个应用程序,php可以调用该应用程序,并在执行某个程序时终止它。我尝试为此开发一个exe文件,但我无法通过客户端的php调用exe文件。有没有其他我可以开发的php可以调用的应用程序格式?我可以开发一个windows服务并通过php调用它吗?我可以要求用户下载和安装任何东西。但是,我无法使用javascript实现这一点。我将稍微重新表述您的问题,以确保我理解: 我可以在服务器上使用PHP脚本调用用户(客户端)计算机上的EXE吗 如果这是你的问题,那么答案是: 否。还有其他方

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

我将稍微重新表述您的问题,以确保我理解:

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

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

否。还有其他方法,但通常在授权网站、客户或专业案例非常严格的子集之外,这些方法不起作用


但是,您在问题中表示,我可以要求用户下载并安装任何内容。如果用户可以从您的网站下载一个文件(可执行文件),然后在他们的计算机上运行,那么问题出在哪里

我设法解决了这个问题,但我不确定它是否适用于任何可能遇到这个问题的人

我在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。

您想运行在客户端计算机上编写的应用程序吗?不是服务器吗?是的。我可以让他们下载,但我不知道如何从服务器端调用它。@Frosty我同意你的看法。有些intranet应用程序使用(或安装)计算机上已有的文件(HTA和trend micro的office scan web安装)。我可以让客户端下载exe文件,但该exe文件必须在单击网站上的按钮后执行。@user1439090您不能使用PHP在客户端计算机上强制运行可执行文件。PHP在服务器端执行(解析)。除了通过web浏览器传递给它的一些变量之外,它对客户端机器没有任何概念。这对我来说只是一个安全漏洞,你所描述的听起来更像是你想要javascript来做的。现在大多数浏览器都有保护措施来防止这种类型的活动。虽然我确信你没有做任何恶意的事;有很多人会…基本上,主要的应用程序是客户端,在客户端的计算机上打开一个新的桌面,并通过这个桌面上的浏览器与网站交互。当他们在这个网站上提交完数据后,我想关闭新的桌面并将客户端切换回原始桌面。我没有打开新桌面的应用程序的代码,但是当我们关闭这个应用程序中的某个进程时,它会关闭整个应用程序。我的exe文件用于关闭该进程。