Página 1 de 1

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 13:26
por porter
ola pessoal, estou tentando deletar um arquivo em tempo de execução mas não apaga, não da erro, mas nao apaga, estou fazendo assim:

FERASE("CONTAS.EXE")

Windows 7 64 bits, xHarbour

obrigado.

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 14:37
por Kapiaba
Tente assim, se o contas.exe nao estiver em uso no momento.

Código: Selecionar todos

   aeval(directory("CONTAS.EXE"),{|x|ferase(x[1])})
abs.

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 15:34
por porter
ola Kapiaba, eu quero apagar o executavel mesmo, outro arquivo, esse comando que você passou da certo, mas se for o executavel ele não apaga.

obrigado.

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 15:42
por Kapiaba
Perguntas:

1 - você está usando o CONTAS.EXE , na hora em que dá o comando?

2 - O CONTAS.EXE está no local? Senão estiver, aponte o local, ex.: "C:\DIR\CONTAS.EXE"

FERASE "C:\TEMP\CONTAS.EXE"

Podeis tentar também, via .BAT com o comando /Y para que o .BAT, não peça confirmação de exclusão.

abs.

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 15:49
por porter
sim, ele está no mesmo diretorio, a intenção é que se a data ultrapassar uma data limite pré determinada, eu quero apagar o executavel, na hora que acessar o sistema, será verificado uma data limite, se essa data limite for maior, quero deletar o executavel, acho que por estar em uso, nao esta deletando.

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 16:02
por Kapiaba
Veja se entende, como pegar a data do excutavel em xHarbour - Ignore a mensagem em FiveWin

Código: Selecionar todos


      LOCAL cFile, aDir, dExe

      IF FILE( "C:\INST_NFE\NFe_Util_2Gv2.03a.exe" )

         cFILE := "C:\INST_NFE\NFe_Util_2Gv2.03a.exe"  // 03/09/2014

         aDIR  := DIRECTORY( cFILE ) // para extrair a data do .EXE

         dEXE  := aDIR[1] [3]  // Data do .exe no diretorio C:\INST_NFE

         cVersaoFlex := DTOC( dEXE ) + " - " + OemToAnsi( "VersÆo: 2Gv2.03a" )

      // 06/11/2014  15:23         2.131.568 NFe_Util_2Gv1.1f_PL006p.exe
      ELSEIF FILE( "C:\INST_NFE\NFe_Util_2Gv1.1f_PL006p.exe" )

         cFILE := "C:\INST_NFE\NFe_Util_2Gv1.1f_PL006p.exe"  // 06/11/2013

         aDIR  := DIRECTORY( cFILE )

         dEXE  := aDIR[1] [3]  // Data do .exe no diretorio C:\INST_NFE

         cVersaoFlex := DTOC( dEXE ) + " - " + OemToAnsi( "VersÆo: 2Gv1.1f" )

      ELSE  // Ignore a mensagem em Fivewin, ponha em modo console.

         MsgStop( OemToAnsi( "ATEN€ÇO USUµRIO:                   CUIDADO!" )+CRLF+ ;
                  OemToAnsi( "NECESSµRIO A PARTIR DA VERSÇO 3.71 DA NF-E." )+CRLF+ ;
                  OemToAnsi( "O INSTALADOR DA FLEXDOCS NÇO FOI LOCALIZADO" )+CRLF+ ;
                  OemToAnsi( "NO DIRETàRIO C:\INST_NFE                   " )+CRLF+ ;
                  OemToAnsi( "INFORME ESTE PROBLEMA AO SUPORTE URGENTE!  " )+CRLF+ ;
                  OemToAnsi( "TECLE <ENTER> PARA CONTINUAR...            " ),      ;
                  OemToAnsi( "O INSTALADOR DA FLEXDOCS NÇO FOI LOCALIZADO" ) )

         dEXE := "          "  // nao achou o executavel

      ENDIF
abs

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 16:09
por Kapiaba
use o comando: DIRECTORYRECURSE para saber qualquer coisa em seu HD/diretório.

Código: Selecionar todos

* $Id: dirtest4.prg,v 1.2 2004/03/03 04:48:39 ronpinkas Exp $
*
* Test program for extended DirectoryRecurse()
*
* Syntax : DirectoryRecurse( <cPath> )
*
* cPath = wild card skleton including path name
*
* Andi Jahja
*

//------------------------------------------------
PROCEDURE Main()

   ? "Will get ALL *.EXE file in C:\WINDOWS and SUB folders. Press any key ...."
   Inkey(0)
   ? "Working ..."
   Showit( DIRECTORYRECURSE( "C:\WINDOWS\*.EXE" ) )
   ?

   ? "Will get ALL *.DLL file in C:\WINDOWS and SUB folders. Press any key ...."
   Inkey(0)
   ? "Working ..."
   ShowIt( DIRECTORYRECURSE( "C:\WINDOWS\*.DLL" ) )

   ? "Will get ALL *.OCX files in C:\WINDOWS and SUB folders. Press any key ...."
   Inkey(0)
   ? "Working ..."
   ShowIt( DIRECTORYRECURSE( "C:\WINDOWS\*.OCX" ) )

   ? "Will get ALL *.PRG file in CURRENT and SUB folders. Press any key ...."
   Inkey(0)
   ? "Working ..."
   ShowIt( DIRECTORYRECURSE( "*.PRG" ) )

RETURN

//------------------------------------------------
STATIC PROCEDURE ShowIt( aDir )

   LOCAL aFile

   FOR EACH aFile IN aDir
      ? PadR( aFile[1], 38 ), Transform( aFile[2], "999,999,999,999" ), aFile[3], aFile[4], aFile[5]
   NEXT

   ?
   ? Len( aDir), "files listed."
   ?

RETURN
Abs

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 16:11
por porter
Eu quero fazer assim, não sei se tem jeito, o executavel ele nao apaga, outro arquivo qualquer ele apaga normalmente.

Se data de hoje for maior que 14/12/2014
if data > 14/12/2014
deletar o arquivo CONTAS.EXE
endif

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 16:18
por Kapiaba
Para fazer isto, vc. tem que finalizar o programa, +- assim:

https://pctoledo.org/forum/viewto ... ill#p88468

abs.

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 17:13
por paiva
Boa

se o exe esta em uso somente renomeando ele para depois deletar.

se quiser matar a execução dele posso passar um kill.exe que uso para matar prg em execução.

sempre que preciso atualizar um exe faço um loop para renome-alo
senão não vai conseguir

se precisar mando ou posto aqui a rotina

Paiva

FERASE nao funcionando para deletar arquivo

Enviado: 15 Dez 2014 23:40
por rochinha
Amiguinho,

Em tempo de execução não é possivel você derrubar o aplicativo. O aplicativo não é louco de cometer suicídio, ka,ka,ka.

Eu entendo o seu procedimento como se estivesse atualizando o aplicativo em uso.

Você, ordena que o aplicativo se feche, mas precisa antes ordenar outro procedimento ou script.

Ao invés de deletar o arquivo, apenas não permita sua execução.

Código: Selecionar todos

if data > 14/12/2014
   Quit // Sai de fininho...
endif
Entenda que se voce presta serviço para alguém e deste serviço consta que ele usará seu aplicativo, o executável é posse do contratante. Você estipula em contrato um período pelo qual "aguarda" o restauro do serviço por parte do contratante no que tange os pagamentos mensais e só depois de X tempo voce pode rescindir o contrato e eliminar o aplicativo.

Coloque data para que ele pare, mas que continue lá.

Coloque verificações para impedir de o usuário retornar a data do computador e continuar usando o aplicativo. Grave no registro, arquivo .MEM, CONFIG.COM, MSDOS.SIS, qualquer coisa e deixe esta data de expiração protelar por alguns dias após o vencimento.

FERASE nao funcionando para deletar arquivo

Enviado: 16 Dez 2014 08:25
por paiva
Uso assim a Mais de 10 anos sem problema
inclusive pelo ts que Todos meus clientes usam

Paiva

function __atualiza_exe


dir_atual = upper(curdrive()+':\'+curdir())
dir_dbdc = upper(curdrive()+':\dbdc')

Wretdir := dirchange(dir_dbdc)


MMDrv := "\dbdc\atualiza.exe" && baixar em:
xMMDrv := "www/exe/atualiza.exe" && Pegar de:

arqftp = [atualiza.exe]

tamaftp = 0
meuftp('3',arqftp,xMMDrv) && dir

x_tempo_demora = [Dever  DEMORAR de 3 a 5 Minutos ... DEPENDENDO da velocidade de SUA InterNet. ]

meuftp('2',arqftp,xMMDrv) && download

mydir := directory(arqftp)
tamadis := if(len(mydir) > 0 , mydir[1,2] , 0)
if tamadis # tamaftp
pmsg = " ATEN€ÇO - POR Algum MOTIVO o DOWNLOAD da Atualiza‡Æo N¶O foi feito CORETAMENTE. AGUARDE uns Minutos... e TENTE outra vez. Caso N¶O consiga BAIXAR Corretamente, CONTACT o SUPORTE."
ftempo(5)
ferase(arqftp)
else
* ATUALIZA€¶O do sfa.exe
xarq = [\dbdc\atualiza.exe]
if file(xarq)
for x_existe = 1 to 100
xarq = [\dbdc\sfa.]+strzero(x_existe,3)
erase &xarq
if file(xarq)
loop
endif
exit
next
rename \dbdc\sfa.exe to &xarq
rename \dbdc\atualiza.exe to \dbdc\sfa.exe

pmsg = [ATEN€¶O - Foi ATUALIZADO o Execut vel, Re-Inicie o Sistema Novamente, Obrigado]
ftempo()

quit

endif
endif

Wretdir := dirchange(dir_atual)

FERASE nao funcionando para deletar arquivo

Enviado: 16 Dez 2014 08:47
por Pablo César
rochinha escreveu:Em tempo de execução não é possivel você derrubar o aplicativo. O aplicativo não é louco de cometer suicídio, ka,ka,ka.

Eu entendo o seu procedimento como se estivesse atualizando o aplicativo em uso.

Você, ordena que o aplicativo se feche, mas precisa antes ordenar outro procedimento ou script.

Ao invés de deletar o arquivo, apenas não permita sua execução.

Entenda que se voce presta serviço para alguém e deste serviço consta que ele usará seu aplicativo, o executável é posse do contratante. Você estipula em contrato um período pelo qual "aguarda" o restauro do serviço por parte do contratante no que tange os pagamentos mensais e só depois de X tempo voce pode rescindir o contrato e eliminar o aplicativo.

Coloque data para que ele pare, mas que continue lá.

Coloque verificações para impedir de o usuário retornar a data do computador e continuar usando o aplicativo. Grave no registro, arquivo .MEM, CONFIG.COM, MSDOS.SIS, qualquer coisa e deixe esta data de expiração protelar por alguns dias após o vencimento.
Concordo 100% com o que o colega Rochinha disse. A rotina de atualização, deverá ser baixado em diretório temporário e a espera que o usuário feche o aplicativo e jamais ser apagado. Derrubar a aplicação é algo muito sério ! Depois o usuário poderá encontrar problemas na base de dados. Há conceitos que devem ser revisto e tudo deve funcionar de forma segura, completa e atendendo sempre a ética. Se o usuário questionasse o porquê o executável sumiu a uma Microsoft ou qualquer empresa grande de software, seria causa ganha. mesmo tenha expirado o período de utilização.