public static void CanRun()
{
if (Empresas.Configuracoes == null || Empresas.Configuracoes.Count == 0)
{
return;
}
//se no diretório de envio existir o arquivo "nome da máquina.locked" o diretório já está sendo atendido por alguma instancia do UniNFe
foreach (Empresa emp in Empresas.Configuracoes)
{
if (string.IsNullOrEmpty(emp.PastaBase))
{
throw new NFe.Components.Exceptions.ProblemaExecucaoUniNFe("Pasta de envio da empresa '" + emp.Nome + "' não está definida.");
}
else
{
string dir = emp.PastaBase;
if (!Directory.Exists(dir))
{
throw new NFe.Components.Exceptions.ProblemaExecucaoUniNFe("Pasta de envio da empresa '" + emp.Nome + "' não existe.");
}
else
{
string fileName = String.Format("{0}-{1}.lock", Propriedade.NomeAplicacao, Environment.MachineName);
string filePath = String.Format("{0}\\{1}", dir, fileName);
//se já existe um arquivo de lock e o nome do arquivo for diferente desta máquina
//não pode deixar executar
string fileLock = (from x in
(from f in Directory.GetFiles(dir, "*" + Propriedade.NomeAplicacao + "*.lock")
select new FileInfo(f))
where !x.Name.Equals(fileName, StringComparison.InvariantCultureIgnoreCase)
select x.FullName).FirstOrDefault();
if (!String.IsNullOrEmpty(fileLock))
{
FileInfo fi = new FileInfo(fileLock);
throw new NFe.Components.Exceptions.AppJaExecutando("Já existe uma instância do " + Propriedade.NomeAplicacao +
" em Execução que atende a conjunto de pastas: " + fi.Directory.FullName + " (*Incluindo subdiretórios).\r\n\r\n" +
"Nome da estação que está executando: " + fi.Name.Replace(Propriedade.NomeAplicacao + "-", "").Replace(".lock", ""));
}
}
}
}
}