Je dispose d'un service Windows implémentant la planification Quartz.NET qui lit les informations de travail planifiées à partir d'un fichier XML, les analyse pour qu'une ligne cmd s'exécute et crée un travail planifié avec les paramètres analysés. J'utilise actuellement des scripts de ligne de commande PHP pour tester l'exécution de la ligne de commande du planificateur, et il semble bien débuter les jobs, et ils se terminent même avec succès, montrant la sortie du script dans l'eventLog ...Quartz.NET: l'exécution de la ligne cmd de PHP aboutit à ACCESS DENIED sur php_mssql.dll?
le problème est à chaque fois qu'il fonctionne, un menu contextuel affiche d'avertissement avec l'erreur:
« démarrage PHP: Impossible de charger « C: \ php5 \ php_mssql.dll » bibliothèque dynamique - Accès refusé »
Si je réponds OK à cet avertissement, le script semble fonctionner correctement, mais s'il reste à l'écran, autre script PHP programmé s sera exécuté jusqu'à la fin, mais la sortie est vide (je suppose que le travail en pause est exécuté avant.)
Comment puis-je empêcher ce message d'accès refusé par programme?
Le script d'exécution Job Quartz.NET qui exécute la ligne CMD parser est la suivante:
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);
}
}
Merci à tous à l'avance!
EDIT: Le script php que je cours est un simple HELLO WORLD qui n'interagit pas avec la base de données, mais j'ai l'impression que si j'en ai exécuté un qui utilisait la fonctionnalité DB, il échouerait en raison de l'accès refusé. ... C'est aussi inacceptable, et je dois pouvoir utiliser PHP à pleine capacité pour ce projet!
EDIT2: J'ai installé le service à l'aide d'un compte Windows LocalService.
Cela me obligerait à modifier la configuration des fichiers sur le serveur sur lequel ce service Windows est installé, ce que je ne pourrais peut-être pas faire dans un environnement de production exécutant ce service de planificateur ... Est-il possible d'ajouter un chemin à un processus pour cela? – Rimer