0

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

4

2 回答 2

2

我将稍微改写您的问题以确保我理解:

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

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

不可以。还有其他方法,但它们通常不会在非常严格的授权网站和客户子集或特殊案例之外起作用。

但是,您在问题中说我可以要求用户下载和安装任何东西。如果用户可以从您的网站下载一个文件(可执行文件),然后在他们的计算机上运行它,这似乎是什么问题?

于 2012-10-31T01:30:11.583 回答
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。

于 2012-11-19T08:53:23.010 回答