Quartz.NET:运行PHP cmd行导致php_mssql.dll上的ACCESS DENIED?

时间:2010-12-01 17:31:25

标签: php sql-server quartz.net

我有一个实现Quartz.NET调度的Windows服务,该调度从XML文件中读取预定的作业信息,解析它以运行cmd行,并使用解析的参数创建预定作业。

我目前正在使用PHP命令行脚本来测试调度程序的命令行执行,它似乎正好开始工作,它们甚至成功完成,在eventLog中显示脚本输出... < / p>

问题是每次运行时,都会显示一个警告弹出窗口,显示错误:

“PHP启动:无法加载动态库'C:\ php5 \ php_mssql.dll' - 访问被拒绝”

如果我对此警告做出响应,则脚本似乎运行正常,但如果它仍然在屏幕上,则进一步调度的PHP脚本将运行完成,但输出为空(我假设由先前运行的暂停作业阻止)它。)...

如何以编程方式阻止访问被拒绝的消息?

运行解析的CMD行的Quartz.NET作业执行脚本如下:

public void Execute(JobExecutionContext context)
    {
        EventLog eventLog = new EventLog();
        eventLog.Source = "SchedulerServiceSource";
        eventLog.Log = "SchedulerService";


        JobDataMap dataMap = context.MergedJobDataMap;  // contanis information for this job parsed from the XML file.
        String jobName = dataMap.GetString("name");
        String execute = dataMap.GetString("execute");
        String args = dataMap.GetString("arguments");

        //String LogMsg = "JobRunner Executing=============\n"; // Written to event log after job execution
        //LogMsg += "JobName: " + jobName + "\n";
        //LogMsg += "Executing: " + execute + "\n";
        // eventLog.WriteEntry(LogMsg); // Write the job's details to the log

        try
        {
            Process p = new Process(); // Start the child process.
            // Redirect the output stream of the child process.
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = execute;
            p.StartInfo.Arguments = args;
            p.Start();
            // Do not wait for the child process to exit before
            // reading to the end of its redirected stream.
            // p.WaitForExit();
            // Read the output stream first and then wait.
            String output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            eventLog.WriteEntry(jobName + "\nexecuted:\n---------------\n" + execute + " " + args + "\n---------------\nRESULTS:\n===============\n" + output + "\n===============");
        }
        catch (Exception ex)
        {
            eventLog.WriteEntry(jobName + "\nattempted to execute:\n---------------\n" + execute + " " + args + "\n---------------\n...FAILED:\n===============\n" + ex.Message + "\n===============", EventLogEntryType.Error);
        }
    }

提前感谢大家!

编辑:我正在运行的PHP脚本是一个简单的HELLO WORLD,它不与数据库交互,但我有一种感觉,如果我运行一个使用数据库功能,它会因访问被拒绝的消息而失败。 ..这也是不可接受的,我必须能够完全使用PHP来完成这个项目!

EDIT2:我使用Windows LocalService帐户安装了该服务。

2 个答案:

答案 0 :(得分:0)

试试这个(从其他网站的论坛复制)

在System32目录中复制以下文件 1. libmysql.dll 2. msql.dll

将以下文件复制到php \ ext目录中 1. msql.dll。解压缩PHP 5 zip文件时应复制此文件,但显然不是

重启网络服务器

答案 1 :(得分:0)

事实证明,将服务作为LOCALSYSTEM运行可以解决这个问题......