// run an executable and capture the output public static RunResults RunExecutable(string executablePath, string arguments, string workingDirectory) { RunResults runResults = new RunResults { Output = new StringBuilder(), Error = new StringBuilder(), RunException = null }; try { if (File.Exists(executablePath)) { using (Process proc = new Process()) { proc.StartInfo.FileName = executablePath; proc.StartInfo.Arguments = arguments; proc.StartInfo.WorkingDirectory = workingDirectory; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.OutputDataReceived += (o, e) => runResults.Output.Append(e.Data).Append(Environment.NewLine); proc.ErrorDataReceived += (o, e) => runResults.Error.Append(e.Data).Append(Environment.NewLine); proc.Start(); proc.BeginOutputReadLine(); proc.BeginErrorReadLine(); proc.WaitForExit(); runResults.ExitCode = proc.ExitCode; } } else { throw new ArgumentException("Invalid executable path.", "executablePath"); } } catch (Exception e) { runResults.RunException = e; } return(runResults); }
static void Main(string[] args) { XmlConfigurator.Configure(); string myDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); string configFile = myDir + "\\Config\\multistampa.ini"; string modelFile = myDir + "\\Config\\model.config"; string printBinary = myDir + "\\Stamparegistri\\StampaRegistri.exe"; string printWorkdir = myDir + "\\Stamparegistri"; string printConfigFile = myDir + "\\Stamparegistri\\StampaRegistri.exe.config"; string printUserPrefix = String.Empty; string printPassword = String.Empty; ArrayList admBlackList = new ArrayList(); DateTime d = DateTime.Now; string filename = myDir + "\\" + d.ToString("yyyyMMdd") + "_multistampa.log"; try { writeLog("Multistampa registro v1.0.7\nReading config..."); ConfigManager config = new ConfigManager(configFile); if (config.ExistKey("PRINTUSERPREFIX")) { printUserPrefix = config.GetValue("PRINTUSERPREFIX"); } if (config.ExistKey("PRINTPWD")) { printPassword = config.GetValue("PRINTPWD"); } if (config.ExistKey("BLACKLIST")) { string val = config.GetValue("BLACKLIST"); admBlackList.AddRange(val.Split(';')); writeLog(admBlackList.Count + " blacklisted administrations found."); } DocsPaWR.Amministrazione[] ammWSlist = null; string resultmsg = string.Empty; DocsPaWR.DocsPaWebService WS = new DocsPaWR.DocsPaWebService(); WS.Timeout = System.Threading.Timeout.Infinite; ammWSlist = WS.amministrazioneGetAmministrazioni(out resultmsg); writeLog(ammWSlist.Length + " administrations found."); int okCount = 0; int errCount = 0; int blkCount = 0; int unknCount = 0; foreach (DocsPaWR.Amministrazione amm in ammWSlist) { writeLog("-----------------------------------"); string idAmm = "" + amm.systemId; string codAmm = "" + amm.codice; string descAmm = "" + amm.descrizione; string printUser = codAmm + printUserPrefix; string logPath = codAmm; string logPathHistory = codAmm + "\\History"; string ipaddress = String.Empty; DocsPaWR.Utente utente = null; DocsPaWR.UserLogin userLogin = new DocsPaWR.UserLogin(); userLogin.UserName = printUser; userLogin.Password = printPassword; userLogin.IdAmministrazione = amm.systemId; DocsPaWR.LoginResult lr = WS.Login(userLogin, true, Guid.NewGuid().ToString(), out utente, out ipaddress); if (utente == null) { writeLog("Utente non loggato in DocsPA: " + printUser + " per idAmm: " + amm.systemId); } else { WS.Logoff(utente.userId, utente.idAmministrazione, utente.sessionID, utente.dst); // verificare che ruoli e registri siano valorizzati if (utente.ruoli == null || utente.ruoli[0] == null) { writeLog("Ruoli non configurati per utente: " + printUser + " per idAmm: " + amm.systemId); } else { if (utente.ruoli[0].registri == null || utente.ruoli[0].registri[0] == null) { writeLog("Registri non configurati per utente: " + printUser + " per idAmm: " + amm.systemId); } else { foreach (DocsPaWR.Registro registro in utente.ruoli[0].registri) { string idRegistro = registro.systemId; // Skip if blacklisted if (admBlackList.Contains(codAmm)) { writeLog("Skipped print for " + codAmm + " - " + descAmm + ". Blacklisted."); blkCount++; continue; } // Delete current print config if (System.IO.File.Exists(printConfigFile)) { File.Delete(printConfigFile); } String logString = "Writing config for " + codAmm + " - " + descAmm + " (" + idAmm + ") " + "user: "******"_IDAMM_", idAmm); newline = newline.Replace("_USERNAME_", printUser); newline = newline.Replace("_PASSWORD_", printPassword); newline = newline.Replace("_LOGPATH_", logPath); newline = newline.Replace("_LOGPATHHISTORY_", logPathHistory); newline = newline.Replace("_IDREGISTRO_", idRegistro); configWriter.WriteLine(newline); } configWriter.Flush(); configWriter.Close(); writeLog("Running print service..."); RunResults exeResult = null; try { exeResult = RunExecutable(printBinary, "", printWorkdir); } catch (Exception e) { writeLog("Error running print service:" + e.Message); } string output = exeResult.Output.ToString(); writeLog(output); if (output.Contains("Docspa fallita")) // login failed { writeLog("Print ERROR - Login failed"); errCount++; } else if (output.Contains("Stampa del registro fallita")) // nothing to print or file chars error (invalid chars in reg desc) { if (output.Contains("Non ci sono protocolli da stampare")) { writeLog("Print OK"); okCount++; } else { writeLog("Print ERROR - Check print log for details"); errCount++; } } else if (output.Contains("Docspa eseguita")) // login ok { writeLog("Print OK"); okCount++; } else { writeLog("Print returned an unknown status. See print log for details."); unknCount++; } // Console.ReadKey(); } } } } } writeLog("-----------------------------------"); writeLog("Print process finished. OK: " + okCount + ", ERRORS: " + errCount + ", BLACKLISTED: " + blkCount + ", UNKNOWN: " + unknCount + " over a total of " + ammWSlist.Length); } catch (Exception e) { writeLog("Ex: " + e.Message + "\nStack: " + e.StackTrace); } }